ジョギング
- 香椎浜 x 2 周
- 右足薬指復活した感
日課
- (腕立て x 50 + 腹筋 x 50) x 3
パスタ
- ちょっと趣向を変えて作ってみた
- ソースとパスタの量のバランスが良くなくて味がぼやっとしてしまった
明日から
- 2 泊 3 日で東京出張
今日のるびぃ ~ Ruby 技術者認定試験 Gold 演習問題を解いていく (20) ~
もう何度か解いているけど, Ruby 技術者認定試験合格教本 の演習問題と模擬試験を数問ずつ解いていく. ポイントは, 問題が何について問われているかがちゃんと理解出来ていること.
Q28. 実行環境
以下のコードはプログラムファイル名を出力する. [ x ] に記述する適切なコードを選べ.
puts [ x ]
$0
以下, irb での実行例.
irb(main):001:0> puts $0 irb => nil
$ cat 28.rb
puts $0
$ ruby 28.rb
28.rb
以下, 解説より引用.
プログラムファイルの名前は, グローバル変数 $0 に格納されます.
$PROGRAM_NAME
というグローバル変数も用意されている.
$ irb irb(main):002:0> puts $PROGRAM_NAME irb => nil
$1
以降は最後に成功したパターンマッチで n 番目の括弧にマッチした値が格納される.
irb(main):001:0> str = '<p><a href="http://example.com">example.com</a></p>' => "<p><a href=\"http://example.com\">example.com</a></p>" irb(main):002:0> if %r[<a href="(.*?)">(.*?)</a>] =~ str irb(main):003:1> puts $1 irb(main):004:1> puts $2 irb(main):005:1> end http://example.com example.com => nil
Q29. 文法
以下のコードを実行した結果はどうなるか.
a, b, c = [1, 2] puts a puts b puts c
以下のようになるはず.
1 2 nil
以下, irb による実行例.
irb(main):006:0> a, b, c = [1, 2] => [1, 2] irb(main):007:0> puts a 1 => nil irb(main):008:0> puts b 2 => nil irb(main):009:0> puts c => nil
以下, 解説より抜粋.
Q30. 標準添付ライブラリ
以下のコードを実行するとどうなるか.
array = [1, 2, 3].freeze array += [4, 5] p array
- [1, 2, 3, 4. 5] と表示される
以下, irb での実行例.
irb(main):010:0> array = [1, 2, 3].freeze => [1, 2, 3] irb(main):011:0> array += [4, 5] => [1, 2, 3, 4, 5] irb(main):012:0> p array [1, 2, 3, 4, 5] => [1, 2, 3, 4, 5]
以下, 解説より抜粋.
- freeze はオブジェクトの内容の変更を禁止するが, 参照変数自体は変更可能
- 出題コードでは, 変数 array を破壊的な変更 (
concat
やuniq!
等)は出来ないが, array が別の配列を参照するように変更は可能
以下, ドキュメントより引用.
凍結されるのはオブジェクトであり、変数ではありません。代入などで変数の指す オブジェクトが変化してしまうことは freeze では防げません。 freeze が防ぐのは、 `破壊的な操作' と呼ばれるもの一般です
フムフム