首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >`已定义?`和` `unless` `未按预期工作

`已定义?`和` `unless` `未按预期工作
EN

Stack Overflow用户
提问于 2015-09-29 16:03:16
回答 2查看 506关注 0票数 10

我所期待的是以下代码片段:

代码语言:javascript
复制
var = "Not Empty" unless defined? var
var # => nil

返回"Not Empty",但我得到了nil。对为什么会发生这种情况有什么见解吗?

EN

回答 2

Stack Overflow用户

发布于 2015-09-29 16:09:25

这是Ruby中仅有的几个我称之为真正的WTF的时刻之一。

你必须使用

代码语言:javascript
复制
unless defined? var
  var = :value
end

使用后缀语法,解释器将在内部对值进行nil-ify,以便可以对变量进行推理,从而在检查完成之前对其进行定义:

代码语言:javascript
复制
# Doesn't print anything
unless defined?(foo) and (p(foo) or true)
  foo = :value
end

# Prints nil
bar = :value unless defined?(bar) and (p(bar) or true)
票数 10
EN

Stack Overflow用户

发布于 2015-09-29 16:08:57

局部变量在解析时定义(作为nil)。var2的定义在该条件之前。这使得即使在不执行赋值的情况下也会定义var2。然后,该条件评估定义了var2,这将保留var2的值nil

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32838805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档