【问题标题】:Second command does not execute array.map第二个命令不执行 array.map
【发布时间】:2018-08-28 10:44:51
【问题描述】:

我在下面有这段代码,我的最后一个 elsif 语句有两个命令。问题是当我运行代码时,只执行第一个命令。

例如,如果我运行 translate("banana"),它会返回香蕉湾,正确地将“#{x[0]}ay”添加到数组香蕉中,但是,删除 x[0] 的第二个命令不会执行,我得到了香蕉湾作为回报,而不是预期的 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

【问题讨论】:

    标签: arrays ruby methods arguments notation


    【解决方案1】:

    字符串返回不变是因为 #delete 在调用时不会改变原始输入 - 它返回一个反映结果的新字符串。

    要解决这个问题,您可以调用#delete!,这将修改字符串,或者您可以将删除方法的结果分配回x

    x = x.delete(x[0])
    

    但是,这将从您的字符串中删除 所有x[0] 实例(例如“banana”将变为“ananaay”) - 我认为这不是您希望您的函数执行的操作。

    如果您只想删除目标字母的第一个实例,您可以调用#sub,如下所示:

    x = x.sub(x[0], "")
    

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2010-12-15
      • 2018-07-17
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2016-03-20
      • 1970-01-01
      相关资源
      最近更新 更多