当MyMethod存在时,NoMethodError

时间:2018-04-25 16:04:20

标签: ruby-on-rails ruby rubygems

我无法理解如何解决此错误,因为该方法确实存在,我已经使用'Hi'方法对其进行了测试。

irb(main):001:0> require 'yaml'
=> true
irb(main):002:0> require 'tm'
=> true
irb(main):003:0> Tm.hi
Hey Tm here for duty!
=> nil
irb(main):004:0> hashfile = YAML.load_file('fr.yaml')
=> {"fr"=>{"colors"=>{"yellow"=>"Jaune", "white"=>"Blanc"}, "hello"=>"Bonjour"}}
irb(main):005:0> t = load_translation(hashfile)
Traceback (most recent call last):
        2: from /Users/abderrahmane/.rbenv/versions/2.5.1/bin/irb:11:in `<main>'
        1: from (irb):5 NoMethodError (undefined method `load_translation' for main:Object)

我的班级:

class Tm

  def self.hi
    puts "Hey Tm here for duty!"
  end

  def auxload(hash, lang, concat='')
    ans = {}
    hash.each do |key, val|
      if val.class == Hash
        aux = auxload(val, lang, concat+key+'.')
        aux.each do |k, v|
          ans[k]=v
        end
      else
        ans[concat+key]={lang => val}
      end
    end
    return ans
  end

  # load the translation from the yaml files
  def load_translation(hash)
    key,value = hash.first
    return auxload(value,key)
  end

end

3 个答案:

答案 0 :(得分:2)

要在您的类上调用该方法,首先需要创建该类的实例,然后在该实例上调用该方法。 e.g。

tm = Tm.new
t = tm.load_translation(hashfile)

答案 1 :(得分:1)

您没有从load_translation class的对象调用Tm方法。

您需要一个类的实例:

tm = Tm.new
tm.load_translation(hashfile)

答案 2 :(得分:0)

首先需要通过创建类的实例来调用 load_translation 方法〜

tm = Tm.new
tm.load_translation(hashfile)