谁能解释一下为什么变量a
是nil
?
a = if true
"domain" if true
"nilr" if nil
end
但是这里a返回"domain"
a = if true
"domain" if true
"nilr" if nil
end
puts a.class
Ruby计算块中的每个元素,并隐式返回要运行的最后一条语句的结果。在本例中,它是if nil
测试,它将失败,因此,返回nil
。
你的代码,简化后,看起来像Ruby:
a = begin
"domain"
nil
end
如果该块的末尾是nil
,则计算结果为nil
。
如果你想要分支:
a = if true
if false
"domain"
elsif nil
"nilr"
end
end
虽然这段代码仍然是相当毫无意义的,因为没有表达式在你的if
,改变结果将始终是相同的。
你可能想要的实际上是这样的:
a = case x
when true
"domain"
when nil
"nilr"
end
其中a
的取值取决于x
的取值
你没有一个值来检查domain
或nilr
所以当运行
步骤1:
a = if true
"domain" if true
end
=> result: a = "domain"
步骤2:if nil
正在运行
a = if true
"domain" if true
"nilr" if nil
end
=> result: a = "nilr"
第三步:return a = "nil ">
解决方案:您应该使用其他参数EX: is_domain, env…
a = is_domain? "domain" rescue "nilr"
不返回"domain"该行中没有返回方法。问题是,Ruby运行最后一行并返回结果,如果最后一行是:
"nilr"如果零
那一行的结果是nil,如果是:
"nilr"如果真正的
"a"应该是"nilf"
您可以检查单独运行这一行并查看结果。
使用if语句设置变量,可以这样做:
a = if false
"domain"
elsif true
"nilr"
end