为什么我一直得到一个未定义的方法错误?

时间:2015-07-20 22:31:09

标签: ruby

我正在尝试反转一个字符串:

def reverse(string)
  reversed_string = ""
  string.split("") 
  string.each do |letter, idx|
    reversed_string = string.length > 0 ? letter[idx] + reversed_string : reversed_string
  end
end

reverse("abc")

我不断收到'split'方法不存在的错误以及'each'方法。

2 个答案:

答案 0 :(得分:0)

split根据提供的分隔符将字符串划分为子字符串并返回这些子字符串的数组,它不会改变调用它的字符串 - 所以你要指定它到另一个变量并在其上调用each或者只是链接方法,例如string.split("").each

至于为什么分裂不起作用,你确定string实际上是一个字符串吗?您可以通过is_a?调用检查,例如{ string.is_a? String

答案 1 :(得分:0)

有很多方法可以让你去的地方:

def reverse(s)
  ary = s.split('') # => ["f", "o", "o"], ["b", "a", "r"]
  reversed_str = ''
  ary.size.times do
    reversed_str << ary.pop # => "o", "oo", "oof", "r", "ra", "rab"
  end
  reversed_str # => "oof", "rab"
end

reverse('foo') # => "oof"
reverse('bar') # => "rab"

这不一定是最快的,如果您正在尝试学习如何替换方法,例如reverse,您应该尝试编写几种不同的变体,然后运行基准测试,以便您和&#0} #39;已经发现了最快的方式。以下是Ruby如何定义String.reverse

另请注意,反转字符串与反转数组不同。他们相似,所以对你来说这是一个很好的第二课。