ジョギング
- 天気が悪く、極端に寒いので今日もお休み
- しばらく休んだでの左足の具合も良くなりつつある
日課
- お休み
夕飯
- 鍋
- 味噌出汁
放送大学
- 合格した (と言っても, 特に試験も無いので...w)
- 4 月から晴れて学生
今日のるびぃ ~ Ruby 技術者認定試験 Gold 演習問題を解いていく (2) ~
もう何度か解いているけど, Ruby 技術者認定試験合格教本 の演習問題と模擬試験を数問ずつ解いていく. ポイントは, 問題が何について問われているかがちゃんと理解出来ていること.
Q7. 文法 (Proc)
以下の実行結果になるように, [ x ] に記述する適切なコードを全て選ぶ.
[ x ] tag(:p) {'Hello, World.'}
実行結果.
<p>Hello, World.</p>
さて, 上記のような実行結果になる為には...
# 選択 (1) def tag(name) puts "<#{name}>#{yield}</#{name}>" end # 選択 (2) def tag(name, &block) puts "<#{name}>#{block.call}</#{name}>" end
- yield を使ってブロックの処理を呼び出す
- ブロックを引数として受け取って (& を付ける) を Proc#call を呼び出す
以下, irb を使って実行してみた.
irb(main):001:0> def tag(name) irb(main):002:1> puts "<#{name}>#{yield}</#{name}>" irb(main):003:1> end => :tag irb(main):004:0> tag(:p) {'Hello, World.'} <p>Hello, World.</p> => nil irb(main):005:0> def tag(name, &block) irb(main):006:1> puts "<#{name}>#{block.call}</#{name}>" irb(main):007:1> end => :tag irb(main):008:0> tag(:p) {'Hello, World.'} <p>Hello, World.</p> => nil
Q8. 文法
以下の実行結果になるように, [ x ] に記述する適切なコードを全て選ぶ.
def hoge(*args) p [ x ] end hoge [1, 2, 3]
以下, 実行結果.
[1, 2, 3]
上記のような結果になる為には...
*args
args[0]
以下, 解説より抜粋.
*
が付いたメソッドの引数は可変長引数となり, 配列として扱われる- hoge に配列を渡すと, args[0] に格納される為, 実行結果を
[1, 2, 3]
とする為には,*args
又はargs[0]
とする
以下, irb で実行した結果.
irb(main):005:0> def hoge(*args) irb(main):006:1> p *args irb(main):007:1> end => :hoge irb(main):008:0> hoge [1, 2, 3] [1, 2, 3] => [1, 2, 3] irb(main):009:0> def hoge(*args) irb(main):010:1> p args[0] irb(main):011:1> end => :hoge irb(main):012:0> hoge [1, 2, 3] [1, 2, 3] => [1, 2, 3] irb(main):013:0> def hoge(*args) irb(main):014:1> p args irb(main):015:1> end => :hoge irb(main):016:0> hoge [1, 2, 3] [[1, 2, 3]] => [[1, 2, 3]] irb(main):017:0> hoge 1, 2, 3 [1, 2, 3] => [1, 2, 3] irb(main):018:0> def hoge(*args) irb(main):019:1> p *args irb(main):020:1> end => :hoge irb(main):021:0> hoge 1, 2, 3 1 2 3 => [1, 2, 3]
Q9. 文法
以下の実行結果になるように, [ x ] に記述する適切なコードを全て選ぶ.
def hoge[ x ] puts "#{x}, #{y}, #{params[:z]}" end hoge 1, z: 3
実行結果.
1, 2, 3
上記のような結果となる為には...
(x:, y: 2, **params)
以下, 解説より引用.
キーワード引数の中で任意の値を受け取れるようにしたい場合, 引数の前に
**
を付与することで, 明示的に定義したキーワード以外の引数を Hash オブジェクトで受けることが出来る.
以下, irb で実行した結果.
irb(main):004:0> def hoge(x:, y: 2, **params) irb(main):005:1> puts "#{x}, #{y}, #{params[:z]}" irb(main):006:1> end => :hoge irb(main):007:0> irb(main):008:0* hoge x: 1, z: 3 1, 2, 3 => nil
ふむふむ.