使用puts将Ruby符号转换为#proc
我学习ruby已经两周了,但我有一个问题,你可能现在已经知道了使用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)获取对应的
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
。