我正在学习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}作为一个明确的块,但我很难找到确认的信息.
传递给的符号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}作为显式块
不确定你的意思,但:+肯定不会引用这个块.或任何阻止.或任何东西.
符号只是名称.他们没有指向任何东西.确定它们的含义取决于使用它们的代码.