在 Ruby 中使用 OR 运算符进行重构

Refactoring with OR operator in Ruby

这目前不起作用。但是,我相信解决方案会遵循这些思路吗?如果坐标超过 7,我只需要抛出一个错误。

class Game
  def initialize(args={})
    @dragon = args[:dragon] || [0,5]
    @knight = args[:knight] || [1,3]
    valid?
  end

  def valid?
    raise ArgumentError, 'Please enter values between 0 and 7' unless ( ( (@dragon[0]) && (@dragon[1]) && (@knight[0]) && (@knight[1]) ) > 7 )
  end
end

因此,类似于:

new_game = Game.new({dragon: [2,10], knight: [1,5]})

会抛出错误。

有什么想法吗?

谢谢

你可以这样做:

valid = @dragon.concat(@knight).all? { |n| (0..7).include?(n) }

此 irb 会话显示了该测试的成功和失败案例:

2.3.0 :009 > [2,10].concat([1,5]).all? { |n| (0..7).include?(n) }
 => false
2.3.0 :010 > [2,7].concat([1,5]).all? { |n| (0..7).include?(n) }
 => true

你可以这样做:

raise ArgumentError, 'Please enter ...' if (@dragon | @knight).any? {|i| i > 7}