向函数传递块和数组时出现Ruby语法错误
我试图将数组和块传递给函数,但出现以下错误:向函数传递块和数组时出现Ruby语法错误,ruby,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 'stri
./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'} )
块不应作为参数传递给方法“test” 以下工作将起作用:
test([0,1,2,3]) {puts 'string'}
或者,您可以创建一个过程(这是一个不同于块的对象),并将其传递给“test”方法
p = Proc.new {puts 'string'}
test([0,1,2,3], &p)
方法可以接受形式为
method(args){unnamed block}
的未命名/未指定块,或分配给proc/lambda/任何形式为method(args,&object)
的普通参数,其中,符号表示试图使用#to_proc
方法将参数转换为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
谢谢,如果可以的话,我会接受的。在函数中可以有一个块作为参数,但在调用函数时不能将其作为参数,这似乎是违反直觉的。如果不想使用括号,也可以执行
test[0,1,2,3]do put'string'end
。