Skip to main content
 首页 » 编程设计

ruby中未定义方法,但我已经明确定义了

2025年05月04日56Free-Thinker

我是 Ruby 的初学者,我正在尝试编写一个生成假数据的库。我从我的一个类中收到 NoMethodError,但我已经定义了它,但我不确定是什么原因导致的。

这是我的类(class):

EntityFaker.rb

=begin 
    EntityFaker.rb 
=end 
 
require_relative "EntityFactory" 
 
class Main 
 
    public 
    def self.generate_entities() 
        puts "Generating entities..." 
        EntityFactory.test_function() 
    end 
 
    generate_entities() 
end 

EntityFactory.rb

=begin 
    Entity-Factory 
=end 
 
require 'faker' 
require_relative 'Entities/Person' 
 
class EntityFactory 
 
    @@person_array = [] 
 
    public 
    def self.test_function() 
        generate_people(10) 
    end 
 
    private 
    def self.generate_people(number) 
        p = Person.new(age = number) 
        puts p.to_string() 
        # number.times do |n| 
        #     p = Person.new(age = n) 
        #     puts p.to_string() 
        # end 
    end 
end 

Person.rb

=begin 
    Person.rb 
=end 
 
class Person 
 
    def initialize(age = nil) 
        @@age = age 
    end 
 
    public 
    def self.to_string() 
        return "#{@@age}" 
    end 
end 

您可以看到我已经在 Person 类中明确定义了 to_string() 方法,但是当我运行代码时,出现以下错误:

/home/user/Documents/entity-faker/EntityFactory.rb:20:in `generate_people': undefined method `to_string' for #<Person:0x0000564f481ddbc8> (NoMethodError) 
    from /home/user/Documents/entity-faker/EntityFactory.rb:14:in `test_function' 
    from EntityFaker.rb:12:in `generate_entities' 
    from EntityFaker.rb:15:in `<class:Main>' 
    from EntityFaker.rb:7:in `<main>' 

请您参考如下方法:

根据共享的源代码,您已将 to_string 定义为类方法,然后尝试使用该类的实例来访问它。

要将其用作类方法,请定义

def self.to_string() 
    return "#{@@age}" 
end 
 
Person.to_string() 

要将其用作实例方法,请定义

def to_string() 
    return "#{@@age}" 
end 
 
Person.new.to_string()