Time.now.to_i
現在の秒を整数で欲しいときにはto_iをつけましょう。
p Time.now # => Wed Jan 25 15:53:30 東京 (標準時) 2006 p Time.now.to_i # => 1138172006
File.exist?
ファイルの有無は、File.exist?で調べます。File.exists?はobsoleteのようです。
defined?
変数が定義されているかどうかは、defined?演算子で調べられます。defined?はメソッドではありません。
if defined?(x) print "x is defined.\n" else print "x is not defined.\n" # こちら end x = nil if defined?(x) print "x is defined.\n" # こちら else print "x is not defined.\n" end
最後は受けねらいです。
puts defined?(nil) # => nil puts defined?(true) # => true puts defined?(false) # => false puts defined?(Integer) # => constant puts defined?(3) # => expression puts defined?(String) # => constant puts defined?("String") # => expression puts defined?(xxxx) # => nil puts defined?(puts) # => method puts defined?(defined?) # parse error, unexpected ')'
sizeとlength
Rubyでは、Array#sizeとArray#lengthは同じ意味です。
ブロックパラメータは外部から継承
Rubyでは、ブロックパラメータと同じ名前の変数が前にあったらそれを使います。ブロックパラメータは新しいスコープを作るわけではないのでしょうか。これはちょっと驚きです。
a = [ 1, 2, 3 ] rubyco = 100 p rubyco # => 100 a.each { |rubyco| # ... } p rubyco # => 3
もしも前になかったら、外に飛び出せるわけではないようです。
a = [ 1, 2, 3 ] a.each { |rubyco| p rubyco } p rubyco
実行結果はこうなります。
1 2 3 undefined local variable or method `rubyco' for main:Object (NameError)
定数の中身の変更
名前を大文字で始めると定数になります。定数に再代入すると警告がでますが、定数として参照しているオブジェクトの中身を変更しても警告はでません。
A = [ 1, 2, 3 ] p A[0] # => 1 A[0] = 100 p A[0] # => 100