我试图了解Ruby中的yield如何工作?
def ablock
i = 1
j = 2
yield(i, j, 3, 4)
end
ablock do |x| puts x
end
这给了我一个输出 - 1 2 3 4
但是,
def ablock
i = 1
j = 2
yield(i, j, 3, 4)
end
ablock do |x,y| puts x, y
end
只给我 1 2 作为输出。为什么不3& 4打印?
答案 0 :(得分:3)
答案很简单。你已经正确地定义了你的块方法,但是当你给它一个代码块时,你只给它一个变量来保存4个对象。相反,尝试为你正在屈服的每个对象赋予它一个变量!
def ablock
i=1
j=2
yield(i,j,3,4)
end
ablock do |i,j,k,l|
puts i
puts j
puts k
puts l
end
如果您只想在代码块中使用一个变量,则必须执行多个yield语句(每个对象一个)。
def ablock
i=1
j=2
yield(i)
yield(j)
yield(3)
yield(4)
end
ablock do |i|
puts i
end
快乐的编码!