rubyco(るびこ)の日記 2006年2月
このコンテンツに含まれるページ一覧
Module#module_function
Module#module_functionを使うと、メソッドをモジュール関数としてコピーします。プログラミングRubyでは「モジュールメソッド」と呼んでいますが、module_functionとい...
eachとfor
eachで配列の要素の和を取る例です。違う書き方を試そうと、productの方ではforを使いました。
class Array
def sum
value = 0
each { |e|
value += e
}
value
end
def product
value = 1
for e in self
val...
クラスというオブジェクト
Javaではリフレクションを扱い始めて「そういえば、クラスもオブジェクトなんですね」と気が付くのですが、Rubyでは最初からクラスもオブジェクトで...
二分探索木
Rubyで二分探索木を作ってみました。
class Node
attr_accessor :left, :right, :key, :value
def initialize(key, value)
@up = @left = @right = nil
@key = key
@value = value
end
end
class Tree
def initialize
@root =...
BEGINとEND
RubyのBEGINとENDはPerlのものと同じですね。
BEGIN {
puts "BEGIN"
}
END {
puts "END"
}
begin
puts "begin"
exit
rescue SystemExit
puts "rescue"
ensure
puts "ensure"
end
実行結果です。
BEGIN
begin
rescue
ensure
E...
RubyでSQLite3の練習
SQLite downloadからPrecompiled Binaries For Windowsをダウンロードして展開
sqlite-3_3_3.zip (sqlite3.exe)
sqlitedll-3_3_3.zip (sqlite3.dll, sqlite3.def)
SQLite documentationのGetting Startedを読んで...
open, binmode, seek, getc, putc
RubyのFileを使って配列もどきを作りました。あ、でもcloseしていませんね。
書き込むときは自動的に一文字目がかかれるのに、読み出すときは明示的にchr...
CGIを作る
以前Perlで書いた簡単なメモ書きCGIをRubyに移植して動かしました。
まだ関数ベースで(大きなクラスに全メソッドを入れて)書いているので、OOっぽくありません。それは...
特異メソッド
Rubyでは、オブジェクト固有のメソッドを定義できます。特異メソッドです。
s = "Rubyco"
def s.hello
puts "Hello"
end
s.hello #=> Hello
t = s
t.hello #=> Hello
"Rubyco".hello #...
Module#ancestors
ancestorsは、スーパークラスたちを得ます。
p 0 #=> 0
p 0.class #=> Fixnum
p 0.class.ancestors #=> [Fixnum, Integer, Precision, Numeric, Comparable, Object, Kernel]
p 0.cl...
CGI.escapeHTML
既存のクラスにさくっとメソッド追加できるのは、Rubyの非常によい点だと思います。
require "cgi"
class String
def escapeHTML
CGI.escapeHTML(self)
end
end
puts "<Hello & Goodbye>".escapeHTML ...
each_key
Rubyのハッシュでキーに関してイテレートするときには、keys.eachまたはeach_keyを使います。
h = {
"Alice" => 31,
"Bobby" => 41,
"Chris" => 59,
}
h.keys.each {|k|
puts "#{k} => #{h[k]}"
}
h.each_key {|k|...
クラス定義をHTMLで
RubyのModuleクラスのインスタンス変数を使うと、クラス定義をリフレクトして出力できますね。
疑問: どうしてModule#public_class_methodsやModule#class_methodsがないので...
NKF?
文字コードの変換をしようと思ったのですが、ri NKFでも、ri converterでも、ri Kconvでも、ri convertでも見つかりません。
疑問: riで探すのはまちがっているのでしょうか?id:nurseさ...
trap
trap("INT")を使うと、CTRL+Cでも終了しなくなります。
# trap("INT") { puts "INT" }
trap("EXIT") { puts "EXIT" }
while true
print "."
sleep 1
end
Permalink | コメント(0)
...
` ... `CommentsAdd Star
Rubyの` ... ` の扱いは、Perlのものと似ています。
`perl -v`.each do |line|
print "> #{line}"
end
IO#each_byte
IO#each_byteで1バイトずつファイルを読むことができます。
FILENAME = "file"
open(FILENAME, "w") do |f|
f.puts "Hello!"
f.puts "This is Rubyco."
end
File.open(FILENAME, "r") do |f|
f.each_byte do |c|
printf("%...
4週間が過ぎました
「ほほえみつつ、Ruby。」をキャッチフレーズにしてRubyの勉強を続けています。早いもので、昨日が28日目、4週間が過ぎました。
エディタも2タブにしてみまし...
FileUtilsとtexpdf.rb
pLaTeXPDF変換をするバッチファイル的なスクリプトをRubyで書いてみました(texpdf.rb)。
require "fileutils"
if ARGV.length == 0
puts "Usage: texpdf.rb filename[.tex]"
exit
end
from = ARGV[0].gsu...
Array#each_with_index
Rubyの練習。要素だけではなくインデクス付きのイテレーション。
ary = [ "Alice", "Bobby", "Chris" ]
ary.each_with_index do |e, i|
puts "#{i}: #{e}"
end
実行結果はこうなります。
0: A...
Array#flatten
RubyのArray#flattenは配列を「平ら」にします。再帰的構造はどうなるか気になるところですが、エラーになるようです。
a = [ 1, 2, 3, [ 4, 5, 6 ] ]
b = [ 0, 0, 0 ]
b << b
puts a.flatten
...
String#succ
Rubyにも、Perl同様にマジカルインクリメントがありました。
puts "123456789".succ #=> 123456790
puts "XYZ".succ #=> XZA
puts "<789>".succ #=> <790>
Permalink | コメント(0)
...
ReFe
「ReFeなら表示されますよ」というアドバイスを以前いただいたので、ReFe(りふぇ)なるものをインストールしました。
ReFeからダウンロードして展開。
README.jaを読む。
ruby setup....
Test::Unit::TestCase(2)
修正後。
require "test/unit"
class RubycoTest < Test::Unit::TestCase
def test_rubyco
testval = "Expected"
assert_equal "Expected", testval, "Simple string test."
end
def test_rubycoadd
z = 3 + 4
assert_equal 7, z...
String#scan
scanはイテレータをとることができます。
s = "12,345?67-890"
s.scan(/(\d+)/) do |n|
puts n
end
__END__
12
345
67
890
Permalink | コメント(0)
One-Click Installer
今日は、One-Click InstallerでRubyを入...
1/0と1/0.0
Rubyで1/0はZeroDivisionErrorになるけれど、1/0.0はInfinityになります。
begin
p 1/0
rescue => e
p e #=> #<ZeroDivisionError: divided by 0>
end
begin
p 1/0.0 #=> Infinity
rescue => e
p e
end
Permalink | ...
kind_of?
Rubyのkind_of?またはis_a?を使うと、オブジェクトの種類を弁別できます。オーバーロード代わり(言い過ぎ)。
def exclam(o)
if o.kind_of?(String)
o << "!"
else o.kind_of?(Integer)
v = 1
o.downto(1) ...