Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.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_Syntax_Block_Symbols - Fatal编程技术网

Ruby 向块方法传递符号

Ruby 向块方法传递符号,ruby,syntax,block,symbols,Ruby,Syntax,Block,Symbols,某些块方法(如inject)可以选择使用符号而不是块: %w[a b c].inject(&:+) # => "abc" %w[a b c].inject(:+) # => "abc" %w[a b c].inject("", :+) # => "abc" 而其他块方法,如map不能: %w[a b c].map(&:upcase) # => ["A", "B", "C"] %w[a b c].map(:upcase) # => ArgumentE

某些块方法(如
inject
)可以选择使用符号而不是块:

%w[a b c].inject(&:+)
# => "abc"
%w[a b c].inject(:+)
# => "abc"
%w[a b c].inject("", :+)
# => "abc"
而其他块方法,如
map
不能:

%w[a b c].map(&:upcase)
# => ["A", "B", "C"]
%w[a b c].map(:upcase)
# => ArgumentError: wrong number of arguments (1 for 0)

为什么后者不能接受一个符号?

不确定,但我知道这个操作符
&
到_proc,
inject()
方法接受两个参数第一次累计
proc
,但
map()
只接受一个参数
proc
。在
inject()
中,第一个参数(accum)可以是枚举中的第一项

在某些方法中,这只是对这种特殊情况的特殊处理,而在其他方法中,则缺少这种处理。

对于
注入
,必须使用块(或替换)。如果它没有被传递一个块,那么必须至少有一个参数,最后一个参数必须是一个符号,并且块将由它构造出来。无论是什么样的算术,都没有歧义;最后一个参数用于在缺少块时构造块

对于
map
,块是可选的。当没有给定块时,返回值将是一个
枚举数
实例。因此,根据是否传递了块的信息,无法确定是否应使用最后一个参数来构造块


map
的特殊情况下,它不接受一个参数,因此说应该将一个额外的参数视为一个块是有意义的,但这使得根据算术判断最后一个参数是否被视为一个块变得复杂。而且它也失去了未来改变方法算术性的可能性。

看看我的第二个例子。第一个参数不是enum中的第一项。您是否了解
inject
示例或
map
<代码>注入
在不使用符号的情况下获取参数@塞尔吉奥图兰采夫:对。我想这是关于
inject
map
的特殊情况。同样的
%w[abc]。inject(:+)
%w[abc]。inject(“,:+)
尝试传递错误的accum,比如
%w[abc]。inject(0,:+)
这提高了
类型错误:字符串不能强制到Fixnum
你的意思是任意的吗?是的,我很肯定。