ようへいの日々精進XP

よかろうもん

2018 年 03 月 18 日(日)

ジョギング

  • お休み
  • 相変わらず左ひざの内側が痛い

日課

  • お休み

天神デート

  • 奥さんと天神デート
  • ルイビトンに寄ったりしながら, フェで奥さんが試着しまくっている間に, 天神の角屋で一杯
  • 奥さんはワインレッドのかわいい靴を購入, 俺は何も無し...でも, 楽しかった

今日のるびぃ ~ Ruby 技術者認定試験 Gold 演習問題を解いていく (1) ~

もう何度か解いているけど, Ruby 技術者認定試験合格教本 の演習問題と模擬試験を数問ずつ解いていく. ポイントは, 問題が何について問われているかがちゃんと理解出来ていること.

Q1. 実行環境

Ruby-I オプションの説明として正しいものを全て選ぶ.

  • 引数で指定したディレクトリを $LOAD_PATH 変数 ($:) に追加する
  • 引数で指定したディレクトリは require や load メソッドが呼ばれた時に検索される

以下, 解説より抜粋.

  • -I で指定したパスが直接 RUBYLIB に追加されることは無い
  • -r で指定したファイルを読み込む

ちなみに, $LOAD_PATH を参照した.

irb(main):001:0> $LOAD_PATH
=> ["/home/kappa/.rbenv/rbenv.d/exec/gem-rehash", "/home/kappa/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib", "/home/kappa/.rbenv/versions/2.5.0/lib/ruby/site_ruby/2.5.0", "/home/kappa/.rbenv/versions/2.5.0/lib/ruby/site_ruby/2.5.0/x86_64-linux", "/home/kappa/.rbenv/versions/2.5.0/lib/ruby/site_ruby", "/home/kappa/.rbenv/versions/2.5.0/lib/ruby/vendor_ruby/2.5.0", "/home/kappa/.rbenv/versions/2.5.0/lib/ruby/vendor_ruby/2.5.0/x86_64-linux", "/home/kappa/.rbenv/versions/2.5.0/lib/ruby/vendor_ruby", "/home/kappa/.rbenv/versions/2.5.0/lib/ruby/2.5.0", "/home/kappa/.rbenv/versions/2.5.0/lib/ruby/2.5.0/x86_64-linux"

以下のようなコードで $LOAD_PATH の追加を試す.

p $LOAD_PATH.grep(/test_path/)

以下のように実行すると...

$ mkdir ./test_path
$ ruby -I test_path load_path.rb 
["/home/kappa/sandbox/ruby-exam-gold/test_path"]

test_path が追加されていることが解る. ちなみに, test_path の存在については Ruby 側ではチェックされないので, ディレクトリが存在しなくてもパスを追加することは出来る.

Q2. 文法

以下のコードを実行すると何が表示されるか.

x, *y = *[0, 1, 2]
p x, y

以下のように表示される.

0
[1, 2]

実際に irb で実行してみると, 以下のように出力される.

irb(main):001:0> x, *y = *[0, 1, 2]
=> [0, 1, 2]
irb(main):002:0> p x, y
0
[1, 2]
=> [0, [1, 2]]

以下, 解説より抜粋.

  • 左辺の x には最初の要素が格納される
  • y には * (Splat Operator) が付いているので, 残りの全要素を配列として格納される

ちなみに, Splet Operator を付けていない場合には...

irb(main):003:0> x, y = [0, 1, 2]
=> [0, 1, 2]
irb(main):004:0> p x, y
0
1
=> [0, 1]

上記のように, 2 は切り捨てられる.

Q3. 文法

[ x ] に記述すると, 以下の実行結果にならないコードを全て選ぶ.

puts [ x ]

以下, 実行結果.

0.8

演算結果が Float にならない式を選ぶ必要がある.

  • 4/5 (Integer クラス同士の演算結果は整数となり, 小数点以下は丸められる)
  • 4/5r (Integer クラスと Rational クラスの演算結果は Rational クラスのオブジェクトを生成する)

以下, 実行結果.

irb(main):005:0> 4/5
=> 0
irb(main):006:0> 4/5r
=> (4/5)
# to_f することで 0.8 (Float クラスになる)
irb(main):007:0> (4/5r).to_f
=> 0.8
irb(main):010:0> (4/5r).class
=> Rational

ふむふむ.