如何使用嵌套的if语句从if语句中设置变量



谁能解释一下为什么变量anil?

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的取值

你没有一个值来检查domainnilr所以当运行

步骤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