如何使用Ruby中的块进行收益?

时间:2014-09-18 22:18:05

标签: ruby ruby-on-rails-4

我试图了解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打印?

1 个答案:

答案 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

快乐的编码!