加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 为什么这个内联测试不起作用?

发布时间:2020-12-17 02:43:33 所属栏目:百科 来源:网络整理
导读:我有一个内联,如果没有按照我的想法进行操作,为了清晰起见,我已将其提取到控制台示例中. 我认为内联if在语法上与多行if相同,但它看起来并非如此. foo = "chunky"(bar1 = foo) if (!defined?(bar1) foo)bar1 在这种情况下,bar1最终设置为nil.如果我重组它 foo
我有一个内联,如果没有按照我的想法进行操作,为了清晰起见,我已将其提取到控制台示例中.

我认为内联if在语法上与多行if相同,但它看起来并非如此.

foo = "chunky"
(bar1 = foo) if (!defined?(bar1) && foo)
bar1

在这种情况下,bar1最终设置为nil.如果我重组它

foo = "chunky"
if !defined?(bar2) && foo
  bar2 = foo
end
bar2

然后它工作 – bar2设置为“chunky”(我在第二个例子中使用了bar2而不是bar1,以确保我在每种情况下都使用了未定义的变量).

是不是内联如果总是将bar1设置为某个东西,默认为零?我认为它只是在if之前没有评估部分,如果if测试返回falsy.

解决方法

它失败了,因为只要在赋值的左侧看到一个裸字,它就会被初始化为nil.因此当你做(bar1 = foo)if(!defined?(bar1)&& foo)时,bar1在定义中是否为零?校验.这是一个简化的例子:

>> defined? foo
=> nil
>> foo = 1 if false
=> nil
>> foo
=> nil
>> defined? foo
=> "local-variable"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读