Ruby

出力結果を考えてみよう! Procとは?

yieldメソッド、super、Structクラス、Procオブジェクト、クロージャーに関して

問題: 1

まずは簡単な問題からです。
以下の出力結果を考えて下さい。


def hoge
  puts "TechDRILL"
end

hoge

問題: 2

ターミナルで以下の記述が書いてあるファイルを読み込んだ際に出てくる結果は次のうちどれ!?


test.rb
def offce
 yield
 puts 'Shuwa residence'
 puts 'Shintaiso'
end

offce do puts 'see you' puts 'welcome to' end

(1) see you Shuwa residence welcome to Shintaiso
(2) see you welcome to Shuwa residence Shintaiso
(3) Shuwa residence Shintaiso see you welcome to
(4) welcome to Shintaiso see you Shuwa residence

問題: 3


論述問題


以下の内容のrbファイルを読み込むとArgumentErrorが起こる。理由を簡潔に述べよ


test.rb
class Sekiya
  def nice
    puts 'nice guy'
  end
end

class Joji < Sekiya def introduce(hobby) puts "I like #{hobby}" end end
joji = Joji.new joji.introduce('playing tennis') joji.introduce sekiya = Sekiya.new sekiya.nice

問題: 4

さらにQ3の問題に加え以下の記述のように編集すると結果どのような出力を得られるか


test.rb
class Sekiya
  def nice
    puts 'nice guy'
  end
end

class Joji < Sekiya def greeting(name) puts "I am #{name} " end end
class SuperSekiya < Joji def greeting(hobby) super puts "Nice to meet you!" end end
supersekiya = SuperSekiya.new puts supersekiya supersekiya.greeting 'Joji'

問題: 5

ターミナルのirbを使って以下を回答してください。


test.rb
Human = Struct.new(:age, :gender)
human = Human.new(22, 'male')
# 上記の記述後に一行でmaleと出力するには2つパターンがある。その記述を回答せよ

問題: 6


発展問題なので、調べてみましょう!


Q1 Procオブジェクトとは何か?


Q2 Proc.newで作成されたオブジェクトがとる引数は以下の挙動をします。〇〇〇の部分を回答しましょう


・仮引数の数より多くの引数が渡された場合は〇〇〇する
・引数の数が足りない場合、足りない引数には〇〇〇が渡される
・複数の仮引数が定義されている時に配列が〇〇〇と展開される


Q3 クロージャとは何か一言で説明してください。またRubyにおいてProcオブジェクトとクロージャの関係性について回答してください。
例)


ex.rb
def sushi
  review = 'very good!!'
  Proc.new{ review }
end

food = sushi review = 'so so' food.call #=> "very good"