ようへいの日々精進XP

よかろうもん

2018 年 05 月 12 日(土)

ジョギング

  • 香椎浜 x 3 周
  • ゆっくりと走ったが, 暑さでバテた

日課

  • (腕立て x 50 + 腹筋 x 50) x 3

イオンモール

ナビスコリッツの試食をやっているお姉さんが沢口靖子に一瞬見えてしまったので, ちょっと疲れているのかもしれない.

夕飯

パスタを作るが, 麺とソースの量がアンバランスで最後の方はパサパサになってしまった...

今日のるびぃ ~ Ruby技術者認定試験【Gold】模擬問題を解いてみる (re: 19) ~

もう何度か解いているけど, 再び, Ruby技術者認定試験【Gold】模擬問題 を 3 ~ 5 問くらいずつ解いていく.

Q58. オブジェクト指向

以下のコードの説明として正しいものを選択する.

# コード
module M
  def foo
    puts "foo"
  end
end

class Foo
  extend M
end

Foo.new.foo
  1. 11 行目でエラーになる

以下, irb による実行例.

irb(main):001:0> module M
irb(main):002:1>   def foo
irb(main):003:2>     puts "foo"
irb(main):004:2>   end
irb(main):005:1> end
=> :foo
irb(main):006:0> 
irb(main):007:0* class Foo
irb(main):008:1>   extend M
irb(main):009:1> end
=> Foo
irb(main):010:0> 
irb(main):011:0* Foo.new.foo
NoMethodError: undefined method `foo' for #<Foo:0x00562f4886aa60>

以下, 解説より抜粋.

  • extend はモジュールで定義したメソッドをクラスメソッドとして追加する
  • メソッドを呼び出す場合は Foo.foo と記述する必要がある
irb(main):012:0> Foo.foo
foo
=> nil

Q59. Marshal モジュール

Marshalモジュールの説明として正しいものを選択する.

3. IO オブジェクトや特異メソッドを持つオブジェクトはシリアライズすることができない

以下, ドキュメントより抜粋.

  • Ruby オブジェクトをファイル(または文字列)に書き出したり, 読み戻したりする機能を提供するモジュール
  • 大部分のクラスのインスタンスを書き出す事ができるが, 書き出しの不可能なクラスも存在する

以下のようなファイルに書き出せないオブジェクトを書きだそうとすると, TypeError が発生する.

  • 名前のついてない Class/Module オブジェクト = 無名クラス (この場合は, 例外 ArgumentError が発生)
  • システムがオブジェクトの状態を保持するもの (具体的には Dir, File::Stat, IO とそのサブクラス File, Socket などのインスタンス)
  • MatchData, Data, Method, UnboundMethod, Proc, Thread, ThreadGroup, Continuation のインスタンス
  • 特異メソッドを定義したオブジェクト

Q60. 標準添付ライブラリ

標準添付ライブラリによって提供されていないクラスを選択する.

  1. Swap

その他の選択肢について, ドキュメントより抜粋.

ライブラリ 説明
TCPSocket インターネットドメインのストリーム型ソケットのクラス, IO クラスのサブクラスと同様の入出力が可能.
Thread スレッドを表すクラスで, スレッドとはメモリ空間を共有して同時に実行される制御の流れである.
Test::Unit ユニットテストを行う為のモジュール

フムフム.