使用符号引用Ruby中的块,例如:+,: - ,:*

0 ruby symbols

我正在学习Ruby中符号的使用,并且已经意识到它们主要用作对变量,哈希表中的键的引用,甚至作为在方法中发送块的方式.

我的问题是,什么是符号,例如:+ :- :*,当我在方法中使用它们时引用?

例如,:+用于汇总数组中的所有值:

puts [1,2,3].reduce(:+) 
 => 6
Run Code Online (Sandbox Code Playgroud)

给出与以下相同的结果:

puts [1,2,3].reduce {|sum, i| sum += i}
=> 6
Run Code Online (Sandbox Code Playgroud)

如果我创建自己的版本:+

a = lambda {|sum,i| sum += i}
puts [1,2,3].reduce(&a)
=> 6
Run Code Online (Sandbox Code Playgroud)

因此,我的第一个想法是:+引用{|sum, i| sum += i}作为一个明确的块,但我很难找到确认的信息.

Ser*_*sev 5

传递给的符号reduce将被解释为要在每个元素上调用的方法的名称.所以这

collection.reduce(:foo)
Run Code Online (Sandbox Code Playgroud)

相当于此

collection.reduce { |memo, element| memo.foo(element) }
Run Code Online (Sandbox Code Playgroud)

它与sums一起使用的原因是+operator只是一个数字方法.

 1.+(3) # => 4
Run Code Online (Sandbox Code Playgroud)

因此我的第一个想法是:+引用{| sum,i | sum + = i}作为显式块

不确定你的意思,但:+肯定不会引用这个块.或任何阻止.或任何东西.

符号只是名称.他们没有指向任何东西.确定它们的含义取决于使用它们的代码.