Lỗi Undefined method mặc đù đã xác định rõ ràng?

Loser

New Member
#1
Mình là một người mới bắt đầu với Ruby và đang cố gắng viết một thư viện tạo dữ liệu fake. Mình nhận được lỗi NoMethodError từ một trong các class của mình, nhưng mình đã xác định nó, và mình không chắc chắn điều gì gây ra nó.

Đây là các class của mình:

EntityFaker.rb
Mã:
=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
Mã:
=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
Mã:
=begin
    Person.rb
=end

class Person

    def initialize(age = nil)
        @@age = age
    end

    public
    def self.to_string()
        return "#{@@age}"
    end
end
Có thể thấy mình đã xác định rõ phương thức to_string() trong class Person, nhưng khi mình chạy code thì lại nhận được lỗi sau:
Mã:
/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>'
Mong các bạn giúp đỡ.
 

Admin

Administrator
Thành viên BQT
#2
Theo source code được chia sẻ, bạn đã định nghĩa to_string như là một class method và sau đó bạn đang cố gắng truy cập nó với một instance của class đó.

Để sử dụng nó như một class method, hãy xác định
Mã:
def self.to_string()
    return "#{@@age}"
end

Person.to_string()
Để sử dụng nó như một instance method, hãy xác định
Mã:
def to_string()
    return "#{@@age}"
end

Person.new.to_string()
 
Top