我有一个布尔值来检查它是否为真,然后设置一个局部变量。我如何重构它,使其更具Ruby风格?
if firm.inflection_point
inflection_point = 1
else
inflection_point = 0
end
发布于 2012-11-24 08:47:48
inflection_point = (firm.inflection_point ? 1 : 0)
发布于 2012-11-24 12:29:36
如果你只是在某一点上做到了这一点,那么rudolph9's answer是好的,但是如果你到处都有类似的逻辑,那么也许在你的脑海中对猴子补丁的普遍使用是有意义的:
class FalseClass; def to_i; 0 end end
class TrueClass; def to_i; 1 end end
inflection_point = firm.inflection_point.to_i
在Ruby中,你应该让你所有的逻辑处理真值,而不是0
和1
,但我猜你正在处理一些来自或到一些处理0
和1
的外部系统的输入或输出。然后,像这样做就有意义了。
发布于 2017-01-18 09:26:11
另一种选择是使用短路运算符:
inflection_point && 1 || 0
irb(main):001:0> true && 1 || 0
=> 1
irb(main):002:0> false && 1 || 0
=> 0
https://stackoverflow.com/questions/13537206
复制相似问题