如何在Ruby中实现这一目标?可以在不重复变量的情况下完成吗? 使用Javascript:
npm -v
如果b = a || 7
不是a
,则会a
分配0
一个特定情况是,如果date.wday返回0(星期日),则将其转换为7.
答案 0 :(得分:6)
Ruby中只有两个虚假值:nil
和false
。所以,如果你真的想要这种方法
a = b == 0 ? 7 : b
是一种似是而非的解决方案,因为0
无法评估为false
。
但是,更适合您需求的选项是cwday
,而不是wday
。然后,您不再需要进行此比较,因为它会在星期一返回1
,在星期二返回2
,最后在星期日返回7
。
date = Date.new(2016,19,6) # => Jun 19 2016, Sunday
date.cwday # => 7
答案 1 :(得分:6)
出于好奇:
class Object
def javascript_or?(other)
(is_a?(FalseClass) || nil? || '' == self || 0 == self) ? nil : self
end
end
和
a = b.javascript_or?(7)
答案 2 :(得分:3)
针对0
和7
的特定情况:
a = (b + 6) % 7 + 1
:)
答案 3 :(得分:2)
您可以使用三元运算符:
date.wday == 0 ? 7 : date.wday
答案 4 :(得分:1)
你在这里描述的不是逻辑问题,而是更多的映射问题:
WEEKDAY_MAP = Hash.new { |h,k| h[k] = k < 7 ? k : nil }.merge(0 => 7)
这个重写1..6是相同的,但0变为7.所有其他值都是nil
。
然后你可以用它来重写你的日期标记:
b = WEEKDAY_MAP[a]
如果在某些时候你想再修补逻辑,那也是可能的。