在 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}
这目前不起作用。但是,我相信解决方案会遵循这些思路吗?如果坐标超过 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}