gpt4 book ai didi

ruby - 在 Ruby 中,为什么 `foo = true unless defined?(foo)` 不会进行分配?

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

这是怎么回事? “unless”的两种形式之间的细微差别是什么?

> irb(main):001:0> foo = true unless defined?(foo)
=> nil
irb(main):002:0> unless defined?(fooo) ; fooo = false ; end
=> false

谢谢

最佳答案

显然,ruby 在解析时创建局部变量并将它们设置为 nil,因此无论代码是否执行,它都会被定义并完成。

当代码在第一行被计算时,它不会执行赋值部分,因为 foo 被设置为 nil。第二行,因为fooo还没有被解析,defined?返回nil让block里面的代码执行赋值给 foo.

举个例子,你可以试试这个:

if false  
foo = 43
end
defined? foo
=> "local-variable"

本文摘自论坛post在 ruby 论坛。

关于ruby - 在 Ruby 中,为什么 `foo = true unless defined?(foo)` 不会进行分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2291646/

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