【问题标题】:Ruby: NoMethodError without naming the undefined method?Ruby:NoMethodError 没有命名未定义的方法?
【发布时间】:2018-01-05 19:48:38
【问题描述】:

我正在尝试用 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

【问题讨论】:

  • 你在做什么来得到错误?
  • 您可能需要从 assignment.rb 发布代码。我们需要看看你的班级是如何被使用的。目前还没有发布任何会导致该错误的内容。
  • 他们所说的。我在控制台中加载,它工作正常。

标签: ruby-on-rails ruby methods undefined nomethoderror


【解决方案1】:

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

【讨论】:

  • 我也猜它在第一行,因为它在错误中显示了第 1 行(我假设 * 也杀死了奇怪的空格,所以你的代码在这里应该看起来不错)
【解决方案2】:

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

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

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

您尝试调用的方法的名称是  ,这是一个 Unicode U+AA00 不间断空格。

您应该养成准确阅读错误消息和警告的习惯。例如,当您在此处发布错误消息时,您也错过了复制最后的单引号,它应该是 `&lt;main&gt;' 而不是 `&lt;main&gt;。您还应该配置您的编辑器/IDE 以显示空白。

【讨论】: