假设我有阵列
s = ['Armando','P']
p s[1] == ('R' || 'P' || 'S')
我认为这会返回true,因为P包含在“OR”比较中,但它返回false
答案 0 :(得分:2)
因为它不是如何运作的。 A || B
的定义为A
,如果A
是真实的,则B
。评估顺序与数学一样,括号先行;所以('R' || 'P' || 'S')
是'R'
(因为至少第一个是真实的;实际上所有都是真的)。然后'P' == 'R'
显然是假的。
你需要把它写成:
s[1] == 'R' || s[1] == 'P' || s[1] == 'S'
更短的选择:
%w(R P S).include?(s[1])
答案 1 :(得分:1)
问题在于表达式'R' || 'P' || 'S'
的计算结果为'R'(因为它是表达式中的第一个真值。显然是'P' != 'R'
,这就是整个表达式求值为false
的原因。我要做的是改为使用正则表达式:
# Revised regexp according to Cary Swoveland's recommendation:
!!s[1][/\A[RPS]\z/] #=> true