使用puts将Ruby符号转换为#proc

使用puts将Ruby符号转换为#proc,ruby,function,Ruby,Function,我学习ruby已经两周了,但我有一个问题,你可能现在已经知道了 words = ["hello", "world", "test"] words.map do |word| word.upcase end 等于 words = ["hello", "world", "test"] words.map(&:upcase) 但为什么呢 m = method(:puts) words.map(&m) work???从给定符号获取对象method(:put)获取对应的

我学习ruby已经两周了,但我有一个问题,你可能现在已经知道了

words = ["hello", "world", "test"] 
words.map do |word|
     word.upcase
end
等于

words = ["hello", "world", "test"] 
words.map(&:upcase)
但为什么呢

m = method(:puts)
words.map(&m)
work???

从给定符号获取对象
method(:put)
获取对应的
method
对象

一元
操作员在发动机罩下呼叫:

method(:puts).respond_to?(:to_proc) # => true
Method
中的
to_proc
返回与
{x | Method_name(x)}等价的
proc

[1, 2, 3].map &method(:String)  # => ["1", "2", "3"]
[1, 2, 3].map { |x| String(x) } # => ["1", "2", "3"]
从给定符号获取对象
method(:put)
获取对应的
method
对象

一元
操作员在发动机罩下呼叫:

method(:puts).respond_to?(:to_proc) # => true
Method
中的
to_proc
返回与
{x | Method_name(x)}等价的
proc

[1, 2, 3].map &method(:String)  # => ["1", "2", "3"]
[1, 2, 3].map { |x| String(x) } # => ["1", "2", "3"]
从给定符号获取对象
method(:put)
获取对应的
method
对象

一元
操作员在发动机罩下呼叫:

method(:puts).respond_to?(:to_proc) # => true
Method
中的
to_proc
返回与
{x | Method_name(x)}等价的
proc

[1, 2, 3].map &method(:String)  # => ["1", "2", "3"]
[1, 2, 3].map { |x| String(x) } # => ["1", "2", "3"]
从给定符号获取对象
method(:put)
获取对应的
method
对象

一元
操作员在发动机罩下呼叫:

method(:puts).respond_to?(:to_proc) # => true
Method
中的
to_proc
返回与
{x | Method_name(x)}等价的
proc

[1, 2, 3].map &method(:String)  # => ["1", "2", "3"]
[1, 2, 3].map { |x| String(x) } # => ["1", "2", "3"]
您正在使用从内核中提取方法并将其存储在变量“m”中

接线员呼叫(&p)。明确说明所有这一切:

irb(main):009:0> m = Kernel.method(:puts); ["hello", "world", "test"].map{|word| m.to_proc.call(word)}
hello
world
test
=> [nil, nil, nil]
您正在使用从内核中提取方法并将其存储在变量“m”中

接线员呼叫(&p)。明确说明所有这一切:

irb(main):009:0> m = Kernel.method(:puts); ["hello", "world", "test"].map{|word| m.to_proc.call(word)}
hello
world
test
=> [nil, nil, nil]
您正在使用从内核中提取方法并将其存储在变量“m”中

接线员呼叫(&p)。明确说明所有这一切:

irb(main):009:0> m = Kernel.method(:puts); ["hello", "world", "test"].map{|word| m.to_proc.call(word)}
hello
world
test
=> [nil, nil, nil]
您正在使用从内核中提取方法并将其存储在变量“m”中

接线员呼叫(&p)。明确说明所有这一切:

irb(main):009:0> m = Kernel.method(:puts); ["hello", "world", "test"].map{|word| m.to_proc.call(word)}
hello
world
test
=> [nil, nil, nil]

谢谢你的回答,但是当我这么做的时候-->words=[“你好”,“世界”,“测试”]words.map(&:upcase)过程不是{x|method_name(x)},而是{x|x.method_name()}否?是自动改变的吗?@unoomad是的,你说得对。但是它并不完全是“自动的”,它实际上是在调用
Symbol
。谢谢你的回答,但是当我这样做的时候-->words=[“你好”,“世界”,“测试”]words.map(&:upcase)过程不是{x |方法|名称(x)},而是{x |方法|名称()}否?是自动改变的吗?@unoomad是的,你说得对。但是它并不完全是“自动的”,它实际上是在调用
Symbol
。谢谢你的回答,但是当我这样做的时候-->words=[“你好”,“世界”,“测试”]words.map(&:upcase)过程不是{x |方法|名称(x)},而是{x |方法|名称()}否?是自动改变的吗?@unoomad是的,你说得对。但是它并不完全是“自动的”,它实际上是在调用
Symbol
。谢谢你的回答,但是当我这样做的时候-->words=[“你好”,“世界”,“测试”]words.map(&:upcase)过程不是{x |方法|名称(x)},而是{x |方法|名称()}否?是自动改变的吗?@unoomad是的,你说得对。但它并不完全是“自动”的,它实际上是在调用
Symbol