@input = "rrgb"
def is_letters?
@input.chars.all? {|letter| letter == /[a..zA..Z]/}
end
def right_letters?
@input.chars.all? {|letter| letter =~ (/[rgbyrp]/)}
end
那么#right_letters?将返回true,因为它将返回一个trues数组:[true,true,true,true]。 0是真的,所以它会返回一个真实的数组?
#is_letters?会回归一系列的堕落吗?我不能在那里使用==如果我希望这行代表“这封信是小写字母或大写字母”。
是否有更好的编码方式“这封信是以下字母之一:r,g,b,y,r,p
答案 0 :(得分:1)
这真是一个关于Ruby的问题,并且all?
并不像你认为的那样工作 - 如果块返回false
y值,它只会返回false
,和true
否则。
对你的问题,是的。你错过的是正则表达式在整个字符串上运行,你不必一次做一个字符。所以:
@input = "rrgb"
def is_letters?
! @input.match /[^a-z]/i
end
def right_letters?
@input.match /[rgbyrp]/
end
另请注意,我在上面演示了您尝试用于字符类范围(即。a..z
)的语法错误,正则表达式语法为a-z
。