Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.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 on rails is&;在ruby函数中?_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails is&;在ruby函数中?

Ruby on rails is&;在ruby函数中?,ruby-on-rails,ruby,Ruby On Rails,Ruby,过程示例 p = Proc.new { |x| puts x*2 } [1,2,3].each(&p) “&”告诉ruby将进程转换为块 我有上面的例子,不知道函数是否以proc作为参数 此外,这是rails中表单_的签名 form_for(record, options = {}, &block) &block是将块转换为proc还是反过来 No.&是一个一元运算符,它将过程转换为块(或其他),即 否。&是一个一元运算符,用于将proc转换为块(或其他),即 我有上面的例

过程示例

 p = Proc.new { |x| puts x*2 }
[1,2,3].each(&p)
“&”告诉ruby将进程转换为块

我有上面的例子,不知道函数是否以proc作为参数

此外,这是rails中表单_的签名

form_for(record, options = {}, &block)

&block是将块转换为proc还是反过来

No.
&
是一个一元运算符,它将过程转换为块(或其他),即


否。
&
是一个一元运算符,用于将proc转换为块(或其他),即

我有上面的例子,不知道函数是否以proc作为参数

它不是一个函数(Ruby没有函数)。是接线员。它仅在参数列表中有效,它将
Proc
对象“展开”到块中,就像它已作为文本块传递一样。如果对象还不是一个
Proc
,它将通过将消息
发送到\u Proc
来尝试将其转换为一个

&block是将块转换为proc还是反过来

在这种情况下,
&
是一个仅在参数列表中有效的符号(类似于
*
表示rest参数的方式)。它“包装”传递给
Proc
对象中的messagesend的文本块,并将其绑定到参数,以便在方法/块体中按名称提供它。通常,块是匿名的,只能隐式地
yield
ed

我有上面的例子,不知道函数是否以proc作为参数

它不是一个函数(Ruby没有函数)。是接线员。它仅在参数列表中有效,它将
Proc
对象“展开”到块中,就像它已作为文本块传递一样。如果对象还不是一个
Proc
,它将通过将消息
发送到\u Proc
来尝试将其转换为一个

&block是将块转换为proc还是反过来


在这种情况下,
&
是一个仅在参数列表中有效的符号(类似于
*
表示rest参数的方式)。它“包装”传递给
Proc
对象中的messagesend的文本块,并将其绑定到参数,以便在方法/块体中按名称提供它。通常,块是匿名的,只能隐式地
yield
ed.

->{print“baz”}'->'做什么?它使用1.9中出现的lambda语法,谢谢!还有一个问题。因为ruby中的任何东西都是对象。是对象吗?它的类型是什么?Ruby中的不是所有东西都是na对象。方法、运算符和块不是方法。->{print“baz”}'->'做什么?它使用1.9中出现的lambda语法,谢谢!还有一个问题。因为ruby中的任何东西都是对象。是对象吗?它的类型是什么?Ruby中的不是所有东西都是na对象。方法、运算符和块不是方法。那么它是否意味着“&”可以将参数列表中给定的文字块转换为proc,反之亦然?那么它是否意味着“&”可以将参数列表中给定的文字块转换为proc,反之亦然?
def foo
  yield
end

def bar(&block)
  block.call
end

baz = -> { print "baz" }

foo(baz) # => ArgumentError: wrong number of arguments (1 for 0)
foo(&baz) # => baz

foo(baz) # => ArgumentError: wrong number of arguments (1 for 0)
foo(&baz) # => baz