2006-03-18から1日間の記事一覧

String#to_f

Rubyで文字列を浮動小数点数に変換するには、String#to_fメソッドを使います。詳しくは、ri String#to_f参照。 p "3.14".to_f #=> 3.14 p "314e-2".to_f #=> 3.14 p "3.14ABCDEF".to_f #=> 3.14 p "Rubyco3.14".to_f #=> 0.0

日本語文字列の文字数 / $KCODEよりも-Kオプションで

artonさんのところで話題になっていたので、わたしも書いてみました。無駄に複雑にしています。てへ♪ でも、each_charって便利ではないでしょうか。 $KCODE = 'SJIS' class String def each_char scan(/./) do |c| yield(c) end end def char_count n = 0 ea…

引数まとめて引き渡し

アスタリスク(*)を使うと、メソッドにやってきた引数をまとめて他のメソッドに引き渡せます。…って以前も書いたけれど…、いいや♪ def hyuki(*args) p args end def rubyco(*args) hyuki(*args) end rubyco(3) rubyco(3, 1) rubyco(3, 1, 4)実行結果です。 [3…

aliasとmethodメソッド

methodで得られるメソッドオブジェクトは毎回作られるみたいです(object_idが異なるから)。equal?で比較するとfalseになりますが、==で比較するとtrueです。 aliasで名前を変えても、==で比較するとtrueです。 def rubyco end p method(:rubyco).object_id #…

compact

Array#compactは、配列中のnilを削除した配列を新たに作って返します。compact!は(いつものように)破壊的メソッドです。 a = [ 'A', nil, 'B', 'C', nil, nil, 'D'] p a #=> ["A", nil, "B", "C", nil, nil, "D"] p a.compact #=> ["A", "B", "C", "D"] p …

newを書かずにインスタンス生成

newが嫌いな理由 -- リテラル好き好きを読んで、newを書かずにインスタンス生成する実験をRubyでやってみます。 class Person def initialize(name) @name = name end def hello puts "Hello, #{@name}!" end end def Person(*args) Person.new(*args) end #…

aliasとメモ化

お皿を洗っているときに「aliasで元のメソッドを保存しておくこととメモ化は相性が良い」と気づいたので、さっそくコーディングしてみました。まずは関数的に実装します。 def fib(n) print "." if n <= 1 1 else fib(n - 1) + fib(n - 2) end end def fib_t…

getsとreadline

IO#getsとIO#readlineでは、EOFに達したときの振る舞いが異なります。getsはnilを返しますが、readlineはEOFErrorをraiseします。 まずはgetsを試します。 while line = DATA.gets puts line end __END__ 1 22 333実行結果です。 1 22 333次にreadlineを試し…

負の添字

配列に負の添字を与えると、「後から数えた」要素を意味します(最後の要素は-1番目)。 a = [0, 1, 2, 3] p a[-1] #=> 3 p a[-2] #=> 2 p a[-3] #=> 1 p a[-4] #=> 0 p a[-5] #=> nil

Array.newとブロック

初期値を定めるために、Array.newにブロックを与えることができます。 a = Array.new(7) do |i| (?A + i).chr end p a #=> ["A", "B", "C", "D", "E", "F", "G"]上と同じことは、以下のプログラムでも書けます。 a = ("A".."G").to_a p a #=> ["A", "B", "C"…