我正在学习Ruby中符号的使用,并且已经意识到它们主要用作对变量,哈希表中的键的引用,甚至作为在方法中发送块的方式.
我的问题是,什么是符号,例如:+
:-
:*
,当我在方法中使用它们时引用?
例如,:+
用于汇总数组中的所有值:
puts [1,2,3].reduce(:+) => 6
给出与以下相同的结果:
puts [1,2,3].reduce {|sum, i| sum += i} => 6
如果我创建自己的版本:+
a = lambda {|sum,i| sum += i} puts [1,2,3].reduce(&a) => 6
因此,我的第一个想法是:+
引用{|sum, i| sum += i}
作为一个明确的块,但我很难找到确认的信息.
传递给的符号reduce
将被解释为要在每个元素上调用的方法的名称.所以这
collection.reduce(:foo)
相当于此
collection.reduce { |memo, element| memo.foo(element) }
它与sums一起使用的原因是+
operator只是一个数字方法.
1.+(3) # => 4
因此我的第一个想法是:+引用{| sum,i | sum + = i}作为显式块
不确定你的意思,但:+
肯定不会引用这个块.或任何阻止.或任何东西.
符号只是名称.他们没有指向任何东西.确定它们的含义取决于使用它们的代码.