RubyGoldで実際に出題された問題(うろ覚え)

どうも、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

正解はBです。

各オブジェクト同士の関係

オブジェクトのクラス、スーパークラスの関係については出ました。

実際に出題されたのは以下の問題。

何が表示されますか?

コード

module Foo
end
puts Foo.class #=> ?

正解は「Module」です 。当たり前すぎて逆に迷いました。

よく出題されるのは以下の問題みたいです。

何が表示されますか?

コード

puts Class.superclass

正解は「Module」です。つまりClassは全てModuleでもあるということですね。

結合度の問題

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

 

正解は「B」です。{…}は結合度が高いためエラーが出る記述は 3.upto (0 { |i| puts i })と評価されてしまいます。

ちなみに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]

 

答えは「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"])

 

答えは「B」です

あとは以下のような内容も出ていました。

  • <=>を選ばせる問題が出た
  • オプション引数に**を渡した時の出力がどうなるかは出た
  • Dateオブジェクトに+1した時の挙動は出た
  • puts x ** xで答えが-1になるように選ばせる問題は出た 1iが正解
  • 今回は出なかったけどappend featureに関連する問題が出ることもあるらしい
  • 今回はinstance_eval、module_evalなどの挙動は出なかった
  • prepend、include、extendを選ばせる問題は出た

まとめ

以上のような形です。少しでも参考になれば幸いです!では!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA