ジョギング
日課
- (腕立て x 50 + 腹筋 x 30) x 3
夕飯
- 奥さんが腕によりをかけていた
- ポテトサラダがとても美味しかった
今日のるびぃ ~ Ruby技術者認定試験【Gold】模擬問題を解いてみる (1) ~
もう何度か解いているけど, Ruby技術者認定試験【Gold】模擬問題 を 3 ~ 5 問くらいずつ解いていく.
Q1. private メソッド
以下のコードの実行結果から __(1)__ に当てはまるものを選択してください.
# コード class Foo def bar(obj=nil) __(1)__ end private def foo puts "foo" end end Foo.new.bar(Foo.new) # 実行結果 foo
- 注目するのは private
- private が指定している箇所以降のメソッドは private メソッドとなる
- private はレシーバを付けた呼び出しが出来ないという特徴があるので, __(1)__ には
foo
が入る
[1] pry(main)> class Foo [1] pry(main)* def bar(obj=nil) [1] pry(main)* foo [1] pry(main)* end [1] pry(main)* private [1] pry(main)* def foo [1] pry(main)* puts "foo" [1] pry(main)* end [1] pry(main)* end => :foo [2] pry(main)> Foo.new.bar(Foo.new) foo => nil
Q2. self キーワード
以下のコードの実行結果から __(1)__ に当てはまるものを選択してください.
# コード class Foo def foo __(1)__.bar end def bar puts "bar" end end Foo.new.foo # 実行結果 bar
インスタンスメソッド内で self キーワードを呼び出すことで, メソッドを呼び出したオブジェクト自身を呼び出すことが出来る.
[2] pry(main)> class Foo [2] pry(main)* def foo [2] pry(main)* self.bar [2] pry(main)* end [2] pry(main)* def bar [2] pry(main)* puts "bar" [2] pry(main)* end [2] pry(main)* end => :bar [3] pry(main)> Foo.new.foo bar => nil
Q3. super キーワード
以下のコードの実行結果から __(1)__ に当てはまるものを選択してください.
# コード class Hello def greet "Hello " end end class World < Hello def greet __(1)__ + "World" end end puts World.new.greet # 実行結果 Hello World
親クラスの同名クラスを子クラスから呼び出す場合には, super クラスを利用する.
[4] pry(main)> class Hello [4] pry(main)* def greet [4] pry(main)* "Hello " [4] pry(main)* end [4] pry(main)* end => :greet [5] pry(main)> class World < Hello [5] pry(main)* def greet [5] pry(main)* super + "World" [5] pry(main)* end [5] pry(main)* end => :greet [6] pry(main)> puts World.new.greet Hello World => nil
Q4. 変数展開
以下のコードを実行した結果を選択してください.
a, *b = *[1, 2, 3] p a p b
- 配列の頭に
*
を付けると, 要素を展開することが出来る - 代入式の左辺の変数の先頭に
*
を指定すると複数の要素を配列に集約して受け取ることが出来る
[10] pry(main)> a, *b = *[1, 2, 3] => [1, 2, 3] [11] pry(main)> p a 1 => 1 [12] pry(main)> p b [2, 3] => [2, 3]
Q5. 定数へのアクセス
以下のコードの実行結果から __(1)__ に当てはまるものを選択してください.
# コード module M CONST = "HELLO" end puts __(1)__ # 実行結果 HELLO
- 定数にアクセスする場合
::
を利用する - モジュールによって定数の名前空間が分かれているので
モジュール::定数
でアクセス出来る - トップレベルより定数にアクセスする場合は
::モジュール::定数
でアクセス出来る
[1] pry(main)> module M [1] pry(main)* CONST = "HELLO" [1] pry(main)* end => "HELLO" [2] pry(main)> puts ::M::CONST HELLO => nil
ふむふむ.