将块和数组传递给函数

时间:2015-07-19 17:00:54

标签: ruby

我试图将数组和块传递给函数但是遇到以下错误:

./rb:7: syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '('
test( [0,1,2,3], {puts 'string'} )
                    ^
./rb:7: syntax error, unexpected '}', expecting end-of-input
test( [0,1,2,3], {puts 'string'} )

有问题的代码:

1 #!/usr/bin/env ruby
2 
3 def test(arr, &b)
4   b.call
5 end
6 
7 test( [0,1,2,3], {puts 'string'} )

2 个答案:

答案 0 :(得分:4)

该块不应作为参数传递给方法' test'。

以下内容可行:

test([0,1,2,3]) {puts 'string'}

或者,您可以创建 proc (与块不同的对象)并将其传递给'测试'方法

p = Proc.new {puts 'string'}
test([0,1,2,3], &p)

答案 1 :(得分:0)

方法可以接受method(args) {unnamed block}形式的未命名/未分配块,也可以分配给proc / lambda /以method(args, &object)形式作为普通参数传递的任何块,其中&符号表示尝试转换参数使用Proc方法#to_proc

test([0,1,2,3], &->{puts 'string'})   # lambda
test([0,1,2,3], &MyClass.new)         # MyClass should implement to_proc

class MyClass
  def to_proc
    puts 'string'
  end
end