Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
向函数传递块和数组时出现Ruby语法错误_Ruby - Fatal编程技术网

向函数传递块和数组时出现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