ruby の {} はハッシュを意味するので簡易ブロックとして使えない。
変わりに begin を使えばブロックとして使える。
変わりに begin を使えばブロックとして使える。
hoge ||= begin if true 'true' else 'false' end end puts hoge
true
# これは普通の定数 Hoge = 'aiueo' # 当然定数に代入しようとすると warning が出る Hoge = 'hoge' # 実はクラス定義のただのクラスオブジェクトの参照を格納した定数に過ぎない class C; end # 通常の定数に代入しようとする時と同じ warning が出る # warning: already initialized constant C = 'class' # モジュールも一緒 module M; end M = 'module' puts C puts C.class # Cはすでに String で上書きされてしまっているので new できない C.new # => error
test.rb:4: warning: already initialized constant Hoge test.rb:11: warning: already initialized constant C test.rb:15: warning: already initialized constant M class String test.rb:20: undefined method `new' for "class":String (NoMethodError)
# ruby での private とは # 「明示的なレシーバー(この場合 self や obj)をつけてプライベートメソッドは呼び出すことはできない。」 # 暗黙的なselfレシーバーに対するものでなければならない class C def public_method # 明示的なレシーバーをつけた場合たとえ self でも呼び出せない。 private_method begin self.private_method rescue NoMethodError puts 'no method error' end end private def private_method; puts 'private'; end end obj = C.new obj.public_method obj.private_method
private no method error test.rb:20: private method `private_method' called for #<C:0x9306340> (NoMethodError)
# module Kernel に追加するとどこでも使えるようになる(グローバル関数のようなもの) # 当然使うときはよく検証すること module Kernel def aiueo puts 'aiueo' end end aiueo
aiueo
# 初期化の時などに使う # nil, false なら ||= の右側の値を代入 a = nil p a a ||= 'aiueo' p a a ||= 'foo' p a a = false p a a ||= 0 p a a ||= [] # 0 の場合も true なので ||= で代入はされない p a
nil "aiueo" "aiueo" false 0 0
最新コメント