ジョギング
- 香椎浜 x 2 周
- 終業後, 涼しい時間帯で走った
- 涼しいのでいい感じではしれた気がする
日課
- お休み
- 時間の使い方を工夫せねば
ギョーム
- 勝手に師匠と呼んでいるもりけんさんに色々と教えてもらいながら, 実装を追加したり, ユニットテストを追加したり
- 識者の皆さんにとっては, 些細なことなのかもしれないけど, 自分にとってはすごく勉強になったし, もっと努力せねばと思った次第
今日のるびぃ ~ Ruby 技術者認定試験合格教本 (Silver/Gold 対応) Ruby 公式資格教科書 模擬試験 (8) 組み込みライブラリ (1) ~
irb に動作確認環境は以下の通り.
$ ruby --version ruby 2.1.10p492 (2016-04-01 revision 54464) [x86_64-linux] $ irb --version irb 0.9.6(09/06/30)
組み込みライブラリ (1)
Q50. 以下のコードを実行するとどうなるか. 全て選べ.
t1 = Thread.start do raise ThreadError end loop { n = rand(0..3) puts n if n == 0 break end }
以下, 解答.
- 例外が発生するが, メッセージを出力せずに停止状態になる
- -d オプションを付けた場合, 例外発生のメッセージを出力して終了する
以下, スクリプトで確認.
# 例外が発生したスレッドだけが警告無しで終了して, 以後の処理は継続される $ ruby thread_exception.rb 2 0
以下, -d
オプションを付与して実行.
# 何れかのスレッドで例外が発生した時点でインタプリタ全体が中断する $ ruby -d thread_exception.rb ... 略 Exception `ThreadError' at thread_exception.rb:2 - ThreadError Exception `ThreadError' at thread_exception.rb:5 - ThreadError thread_exception.rb:2:in `block in <main>': ThreadError (ThreadError)
以下, 解説より抜粋.
- マルチスレッドで例外が発生し, 例外が
rescue
で処理されなかった場合, 例外が発生したスレッドだけが警告無しで終了し, 他のスレッドは実行を続ける -d
オプションを付けるとデバッグモードでの実行となり, 何れかのスレッドで例外が発生した時点でインタプリタ全体が中断する
組み込みライブラリ (2)
Q49. Kernel モジュールの load
と require
について, 適切な記述を選べ.
以下, 選択肢.
load
はバイナリエクステンションもロード出来るload
は拡張子無しのライブラリ名を渡すrequire
は同じファイルを複数回ロードすることを防ごうとするrequire
はバイナリエクステンションはロード出来ない
以下, 解答.
- require は同じファイルを複数回ロードすることを防ごうとする
以下, 解説より抜粋.
load
は同じライブラリを複数回ロードするrequire
は同じファイルを一度だけロードするload
はバイナリエクステンションはロード出来ないrequire
はバイナリエクステンションもロードし,.rb
や.so
等の拡張子も補完する
組み込みライブラリ (3)
Q47. オブジェクトのマーシャリングについて, 適切な記述を全て選べ
以下, 選択肢.
- IO クラスのオブジェクトはマーシャリング出来ない
- 特異メソッドを持つオブジェクトはマーシャリング出来ない
- ユーザーが作成したオブジェクトはマーシャリング出来ない
- 無名クラスやモジュールはマーシャリング出来ない
以下, 解答.
- IO クラスのオブジェクトはマーシャリング出来ない
- 特異メソッドを持つオブジェクトはマーシャリング出来ない
- 無名クラスやモジュールはマーシャリング出来ない
以下, 解説より抜粋.
- マーシャリング = オブジェクトを文字列として書き出す
- システムの状態を保持するオブジェクト (IO, File, Dir, Socket) や特異メソッドを定義したオブジェクトはマーシャリング不可
- 無名のクラスやモジュールもマーシャリング不可
以下, マーシャリングの例.
irb(main):002:0> Marshal.dump('aaa') => "\x04\bI\"\baaa\x06:\x06ET" irb(main):003:0> Marshal.load("\x04\bI\"\baaa\x06:\x06ET") => "aaa"
組み込みライブラリ (4)
Q45. Kernel モジュールの clone メソッドについて, 適切な記述を全て選べ.
freeze
, 特異メソッド等の情報を含めてコピーするfreeze
, 特異メソッド等の情報を含めてコピーしない- 参照先のオブジェクトもコピーされる
- 参照先のオブジェクトはコピーされない
以下, 解答.
freeze
, 特異メソッド等の情報を含めてコピーする- 参照先のオブジェクトはコピーされない
以下, 解説より抜粋.
Kernel#clone
はfreeze
,taint
, 特異メソッド等の情報を含めた完全なコピーを作成する- 参照先のオブジェクトはコピーしない (シャローコピー)
フムフム.