我试图将数组和块传递给函数但是遇到以下错误:
./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'} )
答案 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