Ruby: NoMethodError 没有命名未定义的方法?

Ruby: NoMethodError without naming the undefined method?

我正在尝试在 Ruby 中实现我的第一个程序,但我一直收到无方法错误:

undefined method ` ' for MyString:Class (NoMethodError) from assignment.rb:1:in `<main>

我无法弄清楚原因,也无法在网上找到任何可以帮助我解决此问题的方法。我敢肯定它是我错过的一些简单的东西,但非常感谢这方面的帮助,谢谢。我的代码如下。

class MyString

  def initialize(txt1 = "Hello, World!")
    @str = txt1
    @letters = Hash.new
  end

  def str
    @str
  end

  def letters
    @letters
  end

  def frequency
    @str.downcase.each_char.with_object({}) { |c,h|
        (h[c] = h.fetch(c,0) + 1) if c =~ /[a-z]/ }
  end

  def histogram
    @str.downcase!
    freqs = {}
    freqs.default = ''
    @str.each_char { |char| freqs[char] += '*'}
    ("a".."z").each {|x| puts "#{x} : #{freqs[x]}" }
  end

end

检查您的文件是否有一些不可见的白色space,这不是常规 space </code>。 通常,在使用德语键盘的 Mac 上,同样的事情也会发生在我身上(我认为是在某些修饰键 + Space 上)。 最简单的方法是在终端的编辑器中打开所有文件,例如 <code>vim 或只是 cat,因为特殊字符通常显示在那里(作为一些奇怪的 unicode 序列)。

NoMethodError without naming the undefined method?

方法 被命名为 ,它就在引号之间的错误消息中:

undefined method ` ' for MyString:Class (NoMethodError) from assignment.rb:1:in `<main>
                  ↑

您尝试调用的方法的名称是  ,它是一个 Unicode U+AA00 不间断 space.

您应该养成准确阅读错误消息和警告的习惯。例如,您在此处发布错误消息时也没有复制最后的单引号,它应该说 `<main>' 而不是 `<main>。您还应该配置您的编辑器 / IDE 以显示白色 space.