Ruby Goldへの道 day14
以下のサイトでruby gold取得に向けて毎日一回Goldチャレンジを行い間違えた問題を簡単にまとめる。 rex.libertyfish.co.jp
14日目 得点 82点/100点中
- include, extend
- includeしたモジュール内のメソッドはインスタンスメソッドとして呼び出すことができる
- extendしたモジュール内のメソッドはクラスメソッドとして呼び出すことができる
module M def class_m "class_m" end end class C include M # Mモジュールないのメソッドをインスタンスメソッドとして呼び出すことができる end p C.methods.include? :class_m #=> false p C.new.methods.include? :class_m #=> true p C.new.class_m #=> "class_m" p C.class_m #=> undefined method `class_m' for C:Class (NoMethodError)
- lambdaは引数が合っていないとArgumentErrorを返す
- procは引数の足りない分はnilで補完する
local = 0 p1 = lambda { |arg1, arg2| arg1, arg2 = arg1.to_i, arg2.to_i local += [arg1, arg2].max } p1.call("1", "2") p1.call("7", "5") p1.call("9") p local #=> wrong number of arguments (given 1, expected 2) (ArgumentError)
- Objectクラスにメソッドを定義すると特異クラスでもそのメソッドを利用することができる
class Object CONST = "1" def const_succ CONST.succ! end end class Child1 const_succ # "2"になる class << self const_succ # "3"になる end end class Child2 const_succ # "4になる" def initialize const_succ end end Child1.new # "4"のまま Child2.new # "5"になる p Object::CONST
class Object CONST = "1" def const_succ CONST.succ! end end
class Child1 p const_succ #=> "2" class << self p const_succ #=> "3" end end
class Child2 p const_succ #=> "4" def initialize p const_succ #=> "5" end end
Child1.new Child2.new
p Object::CONST