Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 条件三态逻辑_Ruby_Conditional - Fatal编程技术网

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想法就起作用了。我的情况不同:应用程序的许多地方都在检查每个状态,不同的地方检查不同的状态。