問題は四択で10問ずつ合計60問あります。各問題には解答がついていますが、はじめは閉じた状態でトライしてみてください。
10問毎に「終了/採点」ボタンをクリックすると採点ができます。次の10問へお進みください。繰り返しトライすることも可能です。
[コード] class Foo def __(1)__ puts "foo" end end Foo.foo
[実行結果] foo
解説
クラスメソッドはクラスをレシーバにして呼び出すことができます。
クラスメソッドは「クラス.メソッド」の形式で定義できます。
[コード] class Foo def foo self end end class Bar < Foo def bar foo end end p Bar.new.bar.class
解説
BarクラスはFooクラスを継承しておりますので、Barクラスのインスタンスからfooメソッドを呼ぶことができます。また、fooメソッド内にある「self」は、barメソッドを呼び出したBarクラスのオブジェクトを参照します。このオブジェクトに対してclassメソッドが呼ばれますので、結果としてBarが返されます。
[コード] class Foo def bar self.foo end __(1)__ def foo puts "foo" end end Foo.new.bar
[実行結果] foo
解説
privateメソッドはレシーバを指定して呼び出すことはできません。
また何も記述しない場合はpublicメソッドになりますので、なにも記述しなくてもfooメソッドを呼び出すことができます。
[コード] puts [1,2,3].__(1)__
[実行結果] 6
解説
injectメソッドは引数で初期値を取り、レシーバの要素の先頭から順にブロック内の処理を実行し結果を求めていくメソッドです。回答のコードをeachメソッドに置き換えると以下のようになります。
sum = 0 [1,2,3].each{|i| sum = sum + i } puts sum #=> 6
[コード] puts __(1)__
[実行結果] 2.5
解説
整数と浮動小数点数で演算処理すると結果が浮動小数点数で返されます。
すべての数値が整数であれば整数が返されます。
回答では整数同士でのみ演算処理していますので、整数で結果が返されます。
[コード] char = { :a => "A" }.freeze char[:a] = "B" p char
解説
freezeメソッドはオブジェクトを変更不可能にするメソッドです。
ハッシュオブジェクトの値を変更しようとしている行でエラーが発生し、プログラムが終了します。
[コード] sum = Proc.new{|x, y| x + y} puts __(1)__
[実行結果] 3
解説
Proc.newではブロックで指定した手続きを表すオブジェクトです。
手続きを呼び出す時はProcオブジェクトに対してcallメソッドを呼びます。
ブロック引数はcallメソッドの引数で渡すことができます。
[コード] require 'yaml' dir = <<EOY file1: name: file1.txt data: text EOY p YAML.load(dir)
解説
yamlライブラリを使用すれば、人間が読めるテキスト形式でオブジェクトを表現することができます。
問題中のコードでは、まずハッシュのキーを指定し、さらにインデントでハッシュを指定しています。