ジョギング
- 香椎浜 x 2 周
- 引き続き, 左足の足底と右膝内側に痛み
日課
- (腕立て x 50 + 腹筋 x 30) x 3
インフラ構築
- 久しぶりにインフラ構築をコツコツとやっている
- 根を詰め過ぎたのか午後からずーっと頭痛が続いて辛かった
夕飯
- 俺達の「よしもと」
- 店員の愛想の良いお兄さんが今日で最後の出勤ということで, お花を贈るなど
今日のるびぃ ~ Ruby 技術者認定試験 Gold 演習問題を解いていく (9) ~
もう何度か解いているけど, Ruby 技術者認定試験合格教本 の演習問題と模擬試験を数問ずつ解いていく. ポイントは, 問題が何について問われているかがちゃんと理解出来ていること.
Q25. 組み込みライブラリ
以下の実行結果になるように, [ x ] に記述する適切なコードを選ぶ.
f = Fiber.new { [ x ] 'foo' } puts f.resume
実行結果.
"foo"
[ x ] には, Fiber.yield
が入るはず...なので, irb で実行してみる.
irb(main):001:0> f = Fiber.new { irb(main):002:1* Fiber.yield 'foo' irb(main):003:1> } => #<Fiber:0x005631ab8dada0> irb(main):004:0> irb(main):005:0* puts f.resume foo => nil
以下, 解説より抜粋.
- Fiber.yield は現在のファイバの親にコンテキストを切り替える
- f.resume は, Fiber.yield で与えた引数の foo を返す
以下, ドキュメントからの抜粋メモ.
- Fiber とはノンプリエンプティブな軽量スレッドを提供する
- Thread と違いユーザレベルスレッドとして実装されている
- Thread クラスが表すスレッドと違い, 明示的に指定しない限りファイバーのコンテキストは切り替わらない
できることは...
- Fiber#resume により子へコンテキストを切り替える
- Fiber.yield により親へコンテキストを切り替える
の二通りで, この親子関係は一時的なものであり親ファイバーへコンテキストを切り替えた時点で解消される.
Q26. 標準添付ライブラリ
以下のコードを実行したらどうなるか. テストされるクラスファイル foo.rb は存在している仮定する.
require 'test/unit' require 'foo' class TC_Foo < Test::Unit::TestCase def foo_test # test codes end end
このコードを実行すると, foo_test
が規約に則っていないので実行されない.
以下, 解説より抜粋.
- Test::Unit のテストメソッド名は
test_
で開始する
以下が正しい.
require 'test/unit' require 'foo' class TC_Foo < Test::Unit::TestCase def test_foo # test codes end end
フムフム