我在下面有这个代码,我的最后一个elsif语句有两个命令。问题是当我运行代码时,只执行第一个命令。
例如,如果我运行translate(" banana"),它会返回bananabay,正确添加"#{x [0]} ay"然而,第二个命令,即删除x [0]并没有执行,我得到bananabay作为返回而不是预期的ananabay。
您认为发生了什么?
代码在这里:
def translate(word)
vowels = ["a","e","i","o","u"]
consonants = ["b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z"]
word = word.split
word.map{ |x|
if vowels.include? x[0]
x=x << "ay"
elsif consonants.include? x[0] && x[1]
"#{x[2..-1]}#{x[0]}#{x[1]}ay"
elsif consonants.include? x[0]
x = x << "#{x[0]}ay"
x.delete(x[0])
x
end
}.join(" ")
end
答案 0 :(得分:0)
字符串未更改是因为#delete
在调用时不会改变原始输入 - 它返回一个反映结果的新字符串。
要解决此问题,您可以拨打#delete!
,这可以修改字符串,也可以将删除方法的结果分配回x
:
x = x.delete(x[0])
但是,这会从你的字符串中移除 x[0]
的所有个实例(例如“香蕉”会变成“ananaay”) - 我认为这不是你想要的功能做。
如果您只想删除目标字母的第一个实例,可以调用#sub
,如下所示:
x = x.sub(x[0], "")
希望这有帮助!