Ruby相当于JavaScript运算符`||`

时间:2016-06-22 16:31:20

标签: ruby date

如何在Ruby中实现这一目标?可以在不重复变量的情况下完成吗? 使用Javascript:

npm -v

如果b = a || 7 不是a,则会a分配0

一个特定情况是,如果date.wday返回0(星期日),则将其转换为7.

5 个答案:

答案 0 :(得分:6)

Ruby中只有两个虚假值:nilfalse。所以,如果你真的想要这种方法

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)

针对07的特定情况:

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]

如果在某些时候你想再修补逻辑,那也是可能的。