第二个命令不执行 array.map
Second command does not execute array.map
我在下面有这段代码,我的最后一个 elsif 语句有两个命令。问题是当我 运行 代码时,只执行第一个命令。
例如,如果我 运行 翻译("banana"),它 returns bananabay,正确地将“#{x[0]}ay”添加到数组 banana,但是,第二个删除 x[0] 的命令没有执行,我将 bananabay 作为 return 而不是预期的 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
字符串未更改是因为 #delete
在调用时不会改变原始输入 - 它 returns 反映结果的新字符串。
要解决此问题,您可以调用 #delete!
,这将修改字符串,或者您可以将 delete 方法的结果分配回 x
:
x = x.delete(x[0])
但是,这将从您的字符串中删除 所有 个 x[0]
实例(例如 "banana" 将变为 "ananaay")- 我不不要认为这就是您希望函数执行的操作。
如果你只想删除目标字母的第一个实例,你可以调用#sub
,像这样:
x = x.sub(x[0], "")
希望对您有所帮助!
我在下面有这段代码,我的最后一个 elsif 语句有两个命令。问题是当我 运行 代码时,只执行第一个命令。
例如,如果我 运行 翻译("banana"),它 returns bananabay,正确地将“#{x[0]}ay”添加到数组 banana,但是,第二个删除 x[0] 的命令没有执行,我将 bananabay 作为 return 而不是预期的 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
字符串未更改是因为 #delete
在调用时不会改变原始输入 - 它 returns 反映结果的新字符串。
要解决此问题,您可以调用 #delete!
,这将修改字符串,或者您可以将 delete 方法的结果分配回 x
:
x = x.delete(x[0])
但是,这将从您的字符串中删除 所有 个 x[0]
实例(例如 "banana" 将变为 "ananaay")- 我不不要认为这就是您希望函数执行的操作。
如果你只想删除目标字母的第一个实例,你可以调用#sub
,像这样:
x = x.sub(x[0], "")
希望对您有所帮助!