ジョギング
- おやすみ
- せっかく走る準備をしてきたけど, 朝から雨が降っていたので...
日課
- おやすみ
アジャイル開発セミナー
- 今回の出張の第一プライオリティ
- ガチな講師 (Chef 界隈でも有名な吉羽さんとか) とガチな内容でアジャイル開発をガッツリ勉強した
- やることを優先順位をつけて並べて, 小さい単位でスクラムを回して, スプリント毎に振り返りを行っていくという流れは今の業務にそのまま使えるなーとか, 沢山の気づきがあった
- アジャイル開発と TDD の関連がイマイチ解らなかったので, このあたりは自分で勉強していこうと思っている
金町
- 定時ダッシュして金町に顔を出した
- よっちゃんはちょっと太っていて, 転んで頭をぶつけて 10 針縫ったとか...ほんと気をつけて欲しい
- よっちゃんの後は, 「よしじん」→「やすらぎ」
- きょーじさんと「レッツトライアゲイン」を歌って新橋に帰ってきた
- いつも「お帰り〜」みたいな感じで迎えてくれる金町の皆さんには本当に感謝しかない
今日のるびぃ ~ REx - Ruby Examination にチャレンジ (46) ~
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)
Complex クラス同士の演算
以下のコードを実行するとどうなるか.
val = 1i * 1i puts val.class
以下, 解答.
complex
が出力される
以下, irb による確認.
irb(main):001:0> val = 1i * 1i => (-1+0i) irb(main):002:0> puts val.class Complex => nil
以下, 解説より抜粋.
1i
は複素数 (Complex) のオブジェクトを表している- Complex 同士の演算は Complex を返す
その他の Numeric クラスに属するクラス同士の演算について.
irb(main):001:0> # Integer と Integer irb(main):002:0* (10 * 10).class => Fixnum irb(main):003:0> # Integer と Float irb(main):004:0* (10 * 10.0).class => Float irb(main):005:0> # Integer と Rational irb(main):006:0* (10 * 10r).class => Rational irb(main):007:0> # Integer と Complex irb(main):008:0* (10 * 10i).class => Complex irb(main):009:0> # Float と Float irb(main):010:0* (10.0 * 10.0).class => Float irb(main):011:0> # Float と Rational irb(main):012:0* (10.0 * 10r).class => Float irb(main):013:0> # Float と Complex irb(main):014:0* (10.0 * 10i).class => Complex irb(main):015:0> # Rational と Rational irb(main):016:0* (10r * 10r).class => Rational irb(main):017:0> # Rational と Complex irb(main):018:0* (10r * 10i).class => Complex irb(main):019:0> # Complex と Complex irb(main):020:0* (10i * 10i).class => Complex
Enumerator
以下のプログラムの実行結果を得るために __(1)__ に適切なメソッドをすべて選ぶ.
# コード module Enumerable def with_prefix(prefix) return to_enum(__(1)__, prefix) { size } unless block_given? each do |char| yield "#{prefix} #{char}" end end end [1,2,3,4,5].with_prefix("Awesome").reverse_each {|char| puts char } # 実行結果 Awesome 5 Awesome 4 Awesome 3 Awesome 2 Awesome 1
以下, 解答.
:with_prefix
__method__
以下, irb による確認.
irb(main):001:0> module Enumerable irb(main):002:1> def with_prefix(prefix) irb(main):003:2> return to_enum(:with_prefix, prefix) { size } unless block_given? irb(main):004:2> irb(main):005:2* each do |char| irb(main):006:3* yield "#{prefix} #{char}" irb(main):007:3> end irb(main):008:2> end irb(main):009:1> end => :with_prefix irb(main):010:0> irb(main):011:0* [1,2,3,4,5].with_prefix("Awesome").reverse_each {|char| irb(main):012:1* puts char irb(main):013:1> } Awesome 5 Awesome 4 Awesome 3 Awesome 2 Awesome 1 => #<Enumerator: [1, 2, 3, 4, 5]:with_prefix("Awesome") irb(main):001:0> module Enumerable irb(main):002:1> def with_prefix(prefix) irb(main):003:2> return to_enum(__method__, prefix) { size } unless block_given? irb(main):004:2> irb(main):005:2* each do |char| irb(main):006:3* yield "#{prefix} #{char}" irb(main):007:3> end irb(main):008:2> end irb(main):009:1> end => :with_prefix irb(main):010:0> irb(main):011:0* [1,2,3,4,5].with_prefix("Awesome").reverse_each {|char| irb(main):012:1* puts char irb(main):013:1> } Awesome 5 Awesome 4 Awesome 3 Awesome 2 Awesome 1 => #<Enumerator: [1, 2, 3, 4, 5]:with_prefix("Awesome")>
以下, 解説より抜粋.
- 設問では, ブロックを渡さない場合に
Enumerator
オブジェクトを作成してメソッドをチェーン出来るようにしている - Enumerator オブジェクトを作成するためには,
to_enum
または,enum_for
を利用する - 設問では,
with_prefix
を再び評価する必要がある為,__method__
または:with_prefix
を引数に指定する __method__
はメソッドの中で呼び出すと, そのメソッド名となる
irb(main):014:0> def awesome_method irb(main):015:1> __method__ irb(main):016:1> end => :awesome_method irb(main):017:0> p awesome_method :awesome_method => :awesome_method
フムフム.