gpt4 book ai didi

Ruby block 、procs 和 instance_eval

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

我最近尝试做类似的事情:

a = "some string"
b = Proc.new{ upcase }
a.instance_eval b

这给出了错误:

TypeError: can't convert Proc into String

但这行得通:

def b(&block)
"some string".instance_eval &block
end

b{ upcase }

进一步了解此方法:

def b(&block)
"some string".instance_eval block
end

产生相同的 Proc to String 错误。

所以...我对方 block 的理解是它们只是过程。但是显然,使用这个 & 符号有一些特别之处......

有人能给我解释一下吗?是否可以将普通过程转换为此 &block 对象的特殊之处?

编辑

刚想出我的第二个问题,在过程中添加一个 & ……这很简单,但它到底在做什么?

最佳答案

要使第一个示例正常工作,您需要做的就是:

>> a.instance_eval &b #=> "SOME STRING"

原因是 instance_eval 需要字符串或 block ,而 & 符号提供后者。

关于Ruby block 、procs 和 instance_eval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6372596/

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