どうも、RubyGoldに先日合格したものです。さて今回は実際に出題された問題をうろ覚えですが、簡単にまとめておきたいと思います。
Goldで出題された問題で悩ましかったもの
protectedの使い方
protectedの使い方については出ました。privateとprotectedを選ばせる問題です。
確か計算問題のような形で、内部のサブクラスからのアクセスを許可するためにprotectedを選ばせ、privateはTypeErrorを発生させるために使用しているような形だったと思います。
以下選択肢の中で__(1)__に当てはまらないものはなんですか?
class BaseClass
private
def greet
puts "Hello World!"
end
end
class ChildClass < BaseClass
__(1)__
end
ChildClass.new.greet
[Execution Result]
Hello World!
A:public :greet
B:protected :greet
C:
def greet
super
end
D:
alias_method :original_greet, :greet
def greet
original_greet
end
各オブジェクト同士の関係
オブジェクトのクラス、スーパークラスの関係については出ました。
実際に出題されたのは以下の問題。
何が表示されますか?
module Foo
end
puts Foo.class #=> ?
よく出題されるのは以下の問題みたいです。
何が表示されますか?
puts Class.superclass
結合度の問題
do … endと{ }の結合度の違いによる挙動の違いについては出ました。以下のような問題です。
以下の中で実行するとエラーになるものはどれですか?
A 3.upto(0) { |i| puts i }
B 3.upto 0 { |i| puts i }
C 3.upto(0) do |i| puts i end
D 3.upto 0 do |i| puts i end
ちなみにpを使う場合は{…}を使わないとエラーになるので、そちらも押さえておいた方がいいです。
DATAと__END__を選ばせる問題
公式問題集にもありましたが、Fileオブジェクトのデータを読み出す際の文法について出ました。答えはDATAと__END__の組み合わせです。
大域脱出
大域脱出(たいいきだっしゅつ)についても出ました。第一引数には同じタグを、第二引数には返り値として取得したいものを記述します。
__(1)__に当てはまる記述はどれですか?
letters = catch(:done) do
("a".."z").each do |a|
("a".."z").each do |b|
("a".."z").each do |c|
if a < b && b < c
__(1)__
end
end
end
end
end
puts letters.join
[出力結果]
abc
A: throw [a,b,c]
B: throw [a,b,c], :done
C: throw :done, [a,b,c]
D: raise :done, [a,b,c]
オプション引数 -I
オプション引数の-Iについて問われました。ロードパスへ追加されるといった公式問題集と同じ問題が出ていました。
可変長引数の挙動
以下のような可変長引数の挙動は出ました。
以下の出力結果になるコードはどれですか?
[["apple", "banana", "carrot"]]
A:
def fx(*args)
p(args)
end
fx(*["apple", "banana", "carrot"])
B:
def fx(*args)
p(args)
end
fx(["apple", "banana", "carrot"])
C:
def fx(*args)
p(args)
end
fx("apple", "banana", "carrot")
D:
def fx(*args)
p(*args)
end
fx(["apple", "banana", "carrot"])
あとは以下のような内容も出ていました。
- <=>を選ばせる問題が出た
- オプション引数に**を渡した時の出力がどうなるかは出た
- Dateオブジェクトに+1した時の挙動は出た
- puts x ** xで答えが-1になるように選ばせる問題は出た 1iが正解
- 今回は出なかったけどappend featureに関連する問題が出ることもあるらしい
- 今回はinstance_eval、module_evalなどの挙動は出なかった
- prepend、include、extendを選ばせる問題は出た
まとめ
以上のような形です。少しでも参考になれば幸いです!では!