ジョギング
日課
- (腕立て x 50 + 腹筋 x 50) x 3
結婚式 6 周年
ちょっと早いけど, 結婚から 6 年半ということで, 嬉野温泉に一泊で.
美肌の湯で奥さんにはいつまでも元気でいてほしい.
今日のるびぃ ~ REx - Ruby Examination にチャレンジ (35) ~
REx - Ruby Examination の問題を自分なりにアレンジした上で 1 〜 3 問くらいずつ解いていく. 正直言ってかなり難しい. 尚, irb に動作確認環境は以下の通り.
$ ruby --version ruby 2.1.10p492 (2016-04-01 revision 54464) [x86_64-linux] $ irb --version irb 0.9.6(09/06/30)
Object クラス
以下のコードを実行するとどうなるか.
p [1, 2, 3, 4].map(&self.method(:*))
以下, irb にて動作確認.
irb(main):001:0> p [1, 2, 3, 4].map(&self.method(:*)) NameError: undefined method `*' for class `Object'
以下, 解説より抜粋.
- 設問の
self
は Object クラスのインスタンスとなる - Object クラスには
*
メソッドは定義されていないので,undefined method
の例外となる
以下のように Object クラスに *
メソッドを追加すれば利用出来る.
irb(main):001:0> class Object irb(main):002:1> def *(arg) irb(main):003:2> '*' + arg.to_s + '*' irb(main):004:2> end irb(main):005:1> end => :* irb(main):007:0> [1, 2, 3, 4].map(&self.method(:*)) => ["*1*", "*2*", "*3*", "*4*"]
ちなみに, Object#method についてドキュメントより引用.
オブジェクトのメソッド name をオブジェクト化した Method オブジェクトを返します。
irb(main):006:0> me = -365.method(:abs) => #<Method: Fixnum#abs> irb(main):007:0> me => #<Method: Fixnum#abs> irb(main):008:0> me.call => 365 # 以下と同義 irb(main):009:0> -365.abs => 365
キーワード引数
以下のコードを実行するとどうなるか.
def foo(arg:) puts arg end foo 100
以下, irb にて動作確認.
irb(main):001:0> def foo(arg:) irb(main):002:1> puts arg irb(main):003:1> end => :foo irb(main):004:0> irb(main):005:0* foo 100 ArgumentError: missing keyword: arg
以下, 解説より抜粋.
- キーワード引数は省略することが出来ない
シンボル: 値
の形式で引数を指定する
設問では, 以下のように修正する.
irb(main):001:0> def foo(arg:) irb(main):002:1> puts arg irb(main):003:1> end => :foo irb(main):004:0> irb(main):005:0* foo(arg: 100) 100 => nil
フムフム.