問題は四択で10問ずつ合計60問あります。各問題には解答がついていますが、はじめは閉じた状態でトライしてみてください。
10問毎に「終了/採点」ボタンをクリックすると採点ができます。繰り返しトライすることも可能です。
[コード] class Foo private def foo puts "foofoofoo" end end puts Foo.new.respond_to?(:foo)
解説
respond_to?メソッドは、レシーバが引数で指定した名前のpublicメソッドを持っているか調べるメソッドです。第2引数にtrueを指定すれば、指定した名前のprivateメソッドを持っているかを調べることができます。
[コード] require 'socket' p TCPSocket.ancestors.member?(IO)
解説
TCPSocketはIOクラスを継承しており、Fileクラスなどと同様な操作でソケットを扱うことができます。
解説
Threadクラスのクラスメソッド、new、start、forkはそれぞれ新しいスレッドを生成するメソッドです。
[コード] 1: i = 0 2: while i <= 5 do 3: print i 4: ++i 5: end
解説
Rubyには「++i」という構文はありません。インクリメントする場合は「i += 1」などと記述します。
[コード] class Log [:debug, :info, :notice].each do |level| __(1)__(level) do @state = level end attr_reader :state end log = Log.new log.debug ; p log.state log.info ; p log.state log.notice ; p log.state
[実行結果] :debug :info :notice
解説
define_methodメソッドは引数で指定した名前のメソッドを定義するためのメソッドです。
[コード] var = lambda { puts "hello" } p var.class
解説
lambdaキーワードはProcオブジェクトを生成するためのキーワードです。
[コード] 1: module M 2: def foo 3: puts "foo" 4: end 5: end 6: 7: class Foo 8: extend M 9: end 10: 11: Foo.new.foo
解説
extendはモジュールで定義したメソッドをクラスメソッドとして追加しますので、メソッドを呼び出す場合は、「Foo.foo」と記述する必要があります。