Ruby 条件三态逻辑
我有一个变量,它从三态布尔值中取一个值:Ruby 条件三态逻辑,ruby,conditional,Ruby,Conditional,我有一个变量,它从三态布尔值中取一个值: asap = true asap = false asap = nil Ruby的条件句将它们解释为真或假。特别是,nil与false没有区别 区分false和nil的声明是: 但是RubyMine 6.3.3抱怨说这个表达可以简化,并建议除非尽快。是否有不同的正确方法进行调节?TLDNR 三态通常表示有三个可能的分支,这迫使我认为if和trial都不是?这是普遍适用的 puts case asap when FalseClass then
asap = true
asap = false
asap = nil
Ruby的条件句将它们解释为真或假。特别是,nil与false没有区别
区分false和nil的声明是:
但是RubyMine 6.3.3抱怨说这个表达可以简化,并建议除非尽快。是否有不同的正确方法进行调节?TLDNR
三态通常表示有三个可能的分支,这迫使我认为if和trial都不是?这是普遍适用的
puts case asap
when FalseClass then 'False'
when TrueClass then 'True'
when NilClass then 'Nil'
else 'You are kidding on me, aren’t you?'
end
希望能有帮助
UPD:我想得越多,我就越倾向于认为三元也是好的:
puts asap.nil? ? 'Nil' : asap ? 'True' : 'False'
if asap === false
puts 'False'
end
UPD2:实际上,在case中透明使用的三等比较运算符,对于false===false和true==true,其显然计算结果为true,也可能满足以下要求:
puts asap.nil? ? 'Nil' : asap ? 'True' : 'False'
if asap === false
puts 'False'
end
UPD3:正如@sawa在评论中提到的,这里的想法是错误的,因为nil==false计算为false,因此==false通常不等于除非。TLDNR
三态通常表示有三个可能的分支,这迫使我认为if和trial都不是?这是普遍适用的
puts case asap
when FalseClass then 'False'
when TrueClass then 'True'
when NilClass then 'Nil'
else 'You are kidding on me, aren’t you?'
end
希望能有帮助
UPD:我想得越多,我就越倾向于认为三元也是好的:
puts asap.nil? ? 'Nil' : asap ? 'True' : 'False'
if asap === false
puts 'False'
end
UPD2:实际上,在case中透明使用的三等比较运算符,对于false===false和true==true,其显然计算结果为true,也可能满足以下要求:
puts asap.nil? ? 'Nil' : asap ? 'True' : 'False'
if asap === false
puts 'False'
end
UPD3:正如@sawa在评论中提到的,这里的想法是错误的,因为nil==false的计算结果为false,因此==false通常不等于除非。。这是错误的。责怪鲁比明。这是错误的。您对case语句的使用是正确的,但我认为您的代码不一致。如果您有false和true,那么为什么不使用nil而不是NilClass?或者换句话说,如果您使用的是NilClass,那么为什么不使用TrueClass和FalseClass呢?@sawa您是对的;我想展示不同的方法,但结果我把事情搞砸了。更新。当所有可能的变量值都在一个地方使用时,您的case想法就起作用了。我的情况不同:应用程序的许多地方都在检查每个状态,不同的地方检查不同的状态。您使用的case语句是正确的,但我发现您的代码不一致。如果您有false和true,那么为什么不使用nil而不是NilClass?或者换句话说,如果您使用的是NilClass,那么为什么不使用TrueClass和FalseClass呢?@sawa您是对的;我想展示不同的方法,但结果我把事情搞砸了。更新。当所有可能的变量值都在一个地方使用时,您的case想法就起作用了。我的情况不同:应用程序的许多地方都在检查每个状态,不同的地方检查不同的状态。