我正在尝试使用尽可能少的代码解决Ruby问题:)。我想检查一个给定的字符串是否以不同数量的符号开头,假设在一个和三个'a'之间。使用reg exp很容易,我可以编写string.match(\ ^ a {1,3}。* \)。但是我必须根据a的确切数量对字符串进行更改。如何在不使用三个if的情况下检测它们:
do_string_manipulation1 if string.match(/^a.*/)
do_string_manupulation2 if string.match(/^aa.*/)
...
提前致谢:)
答案 0 :(得分:1)
为什么不使用第一个正则表达式的修改版本然后只计算它返回的a?阿拉
m = string.match(/^(a{1,3})/)
case m[1].size
when 1
when 2
when 3
end
当然,您也可以使用数组来存储要调用的例程,具体取决于数字:
routines = [nil, method(:do_string_manipulation1), method(:do_string_manipulation2), ...]
routines[m[1].size].call
答案 1 :(得分:1)
取决于你的字符串操作是什么。
您可以通过以下方式确定连续的数量:
string.match(/^(a{1,3}).*/)[1].size
您尚未定义规则,因此我的是:
"a" - downcase
"aa" - reverse
"aaa" - swapcase
所以我的代码是:
string.send([:downcase, :reverse, :swapcase][string.match(/^(a{1,3}).*/)[1].size-1])
如果您的规则更复杂,那么您可以将它们定义为类上的方法,并根据返回的数字调用它们。