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
你的意思是任意的吗?是的,我很肯定。