我正在尝试编写一个接收没有空格的字符串的方法。我想要它做的就是返回" bug"当字符串中的字符是字母[A-Za-z]
并返回" ant"如果它是任何其他角色。
def Letter(str)
(0..str.length).to_a do |index|
if str[index].chr =~ /[A-Za-z]/ ##I think this is where things are going wrong.
puts "bug"
else
puts "ant"
end
end
end
有没有人知道如何解决这个问题?我不断获得连续数字的数组。
答案 0 :(得分:3)
重写
def letter(str)
str.each_char.map do |char|
(char =~ /[[:alpha:]]/) ? 'bug' : 'ant'
end
end
在您的代码中,您正在尝试打印“bug”或“ant”;但你返回 (0..str.length).to_a
。此函数将返回一组错误和蚂蚁。它也变得更加Rubyish:
each_char
[A-Za-z]
没问题,但[[:alpha:]]
更清晰,处理Unicode内容。答案 1 :(得分:-1)
def letter(str)
str.chars.each do |x|
puts x=~ /[A-Za-z]/ ? "bug" : "ant"
end
end
首先,在您的循环中,您正在尝试转换范围 成阵列。
(0..str.length).to_a
str.length返回一个数字,因此将其放入数组将为您提供一个数字数组。因此你的问题。
其次,您必须在/a-zA-Z/
正则表达式
第三,使用三元运算符。对于小if语句来说它很棒。下面是语法:
布尔值? "如果布尔值为true,则此代码将执行" :"否则此代码将"
第四,使用.each方法,部分因为循环的简单和迭代而喜欢ruby!
快乐的编码!