ジョギング
日課
- (腕立て x 50 + 腹筋 x 50) x 3
洗面所の鏡に映る自分を見て思った
どうせ禿げるなら, カッコよく禿げたかった. (42 歳・会社員)
— Yohei Kawahara(かっぱ) (@inokara) 2018年5月8日
夕飯
- パスタを作る
- だいぶんこなれてきた
今日のるびぃ ~ Ruby技術者認定試験【Gold】模擬問題を解いてみる (re: 15) ~
もう何度か解いているけど, 再び, Ruby技術者認定試験【Gold】模擬問題 を 3 ~ 5 問くらいずつ解いていく.
Q46. Object#inspect
以下のコードを実行した結果から, __(1)__ にあてはまる正しいものを選択する.
# コード class Person def initialize(name) @name = name end def __(1)__ "My name is #{@name}" end end p Person.new("taro") # 実行結果 My name is taro.
- inspect
以下, irb による実行例.
irb(main):001:0> class Person irb(main):002:1> def initialize(name) irb(main):003:2> @name = name irb(main):004:2> end irb(main):005:1> def inspect irb(main):006:2> "My name is #{@name}" irb(main):007:2> end irb(main):008:1> end => :inspect irb(main):009:0> p Person.new("taro") My name is taro => My name is taro
以下, 解説より抜粋.
- inspect メソッドは p メソッドでオブジェクトそのものを出力した際の文字列表現を指定するメソッド
inspect メソッド無しだと以下のような出力になる.
irb(main):001:0> class Person irb(main):002:1> def initialize(name) irb(main):003:2> @name = name irb(main):004:2> end irb(main):005:1> end => :initialize irb(main):006:0> p Person.new("taro") #<Person:0x0055bc855363c0 @name="taro"> => #<Person:0x0055bc855363c0 @name="taro">
ここに inspect メソッドをオープンクラスして足してあげる.
irb(main):007:0> class Person irb(main):008:1> def inspect irb(main):009:2> "------- #{@name}------" irb(main):010:2> end irb(main):011:1> end => :inspect irb(main):012:0> p Person.new("pika") ------- pika------ => ------- pika------
以下, ドキュメントより引用.
- inspect はオブジェクトを人間が読める形式に変換した文字列を返す
- 組み込み関数 Kernel.#p は, このメソッドの結果を使用してオブジェクトを表示する
$ irb irb(main):001:0> [ 1, 2, 3..4, 'five' ].inspect => "[1, 2, 3..4, \"five\"]" irb(main):002:0> Time.new.inspect => "2018-05-05 06:42:55 +0900"
Q47. FileTest モジュール
FileTestモジュールに存在しないメソッドを選択する.
- child?
以下, 解説より抜粋.
- FileTest モジュールはファイルやディレクトリの検査を行う機能をまとめたモジュール
その他の選択肢について. (ドキュメントより抜粋)
メソッド名 | 機能 |
---|---|
FileTest#file? | ファイルが通常ファイルである時に true を返し, ファイルが存在しない場合, あるいはシステムコールに失敗した場合等に false を返す. |
FileTest#directory? | ファイルがディレクトリの時に true を返し, ファイルが存在しない場合, あるいはシステムコールに失敗した場合等に false を返す. |
FileTest#socket? | ファイルがソケットである時に true を返し, ファイルが存在しない場合, あるいはシステムコードに失敗した場合等に false を返す. |
Q48. オブジェクト指向
下記のコードの説明として正しいものを選択する.
# コード class Foo def initialize(obj) obj.foo end def foo puts "foofoofoo" end end class Bar def foo puts "barbarbar" end end Foo.new(Bar.new)
以下, irb による実行例.
irb(main):001:0> class Foo irb(main):002:1> def initialize(obj) irb(main):003:2> obj.foo irb(main):004:2> end irb(main):005:1> def foo irb(main):006:2> puts "foofoofoo" irb(main):007:2> end irb(main):008:1> end => :foo irb(main):009:0> class Bar irb(main):010:1> def foo irb(main):011:2> puts "barbarbar" irb(main):012:2> end irb(main):013:1> end => :foo irb(main):014:0> Foo.new(Bar.new) barbarbar => #<Foo:0x0055b8e8e92720>
Foo クラスの引数として, オブジェクト化された Bar クラスが渡されており, initialize メソッド内で Bar クラスのインスタンスメソッド foo が呼ばれる状態になっている為, barbarbar
が出力される.
以下のように実行しても同様の結果を得ることが出来る.
irb(main):015:0> Bar.new.foo barbarbar => nil
フムフム.