gpt4 book ai didi

ruby - 为什么 Symbol#to_proc 有这种类型的行为?

转载 作者:数据小太阳 更新时间:2023-10-29 07:45:07 25 4
gpt4 key购买 nike

我找到了这个在 Ruby 中实现自定义 Symbol#to_proc 的示例代码:

class Symbol
def to_proc
puts "In the new Symbol#to_proc!"
Proc.new { |obj| obj.send(self) }
end
end

它包含额外的“puts ...”字符串以确保它不是内置方法。当我执行代码时

p %w{ david black }.map(&:capitalize)

结果是:

In the new Symbol#to_proc!
["David", "Black"]

但为什么不是这样呢?

In the new Symbol#to_proc!
["David"]
In the new Symbol#to_proc!
["Black"]

我的逻辑是这样的:map yield elements 一个一个地block。 block 采用第一个元素并执行 .to_proc,而不是第二个。但是为什么 puts 只执行一次呢?

最佳答案

to_proc 方法被调用一次以返回一个 Proc 对象,然后重复使用该对象,因此您看到了正确的行为。

如果将看跌期权移到里面,您会看到预期的结果:

class Symbol
def to_proc
Proc.new { |obj|
puts "In the new Symbol#to_proc!"
obj.send(self)
}
end
end

关于ruby - 为什么 Symbol#to_proc 有这种类型的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21461956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com