2015-02-24 4 views
0
class Computer_create 

    public 
    def initialize(filename) 
    @@files = [] 
    @filename = filename 
    end 

    public 
    def create(filename) 
    @@files << filename 
    puts "File: #{filename} has been created" 
    end 

    public 
    def list 
    return @@files 
    end 
end 

file_1 = Computer_create.new("FileTest") 
file_1.create("FileTest") 

Computer_create.list 

Я просто пытаюсь создать простую базу данных, которая может создавать файлы и хранить их в массиве, но при этом хранить их в хэше. Но каждый раз, когда я пытаюсь мой код дает мне это:Неопределенный метод для методов класса/вызова за пределами класса

«computer_create.rb: 24: в <top (required)>': undefined method списке» для Computer_create: Класс (NoMethodError)»

, что им пытаются сделать, это: сделайте файл с именем FileTest через file_1 , а затем перечислите все файлы в @@files , но он просто не работает.

ответ

0

Сообщение об ошибке в точности верно; класс не имеет метода list.

Вызов list на например из Computer_create вы уже создали, например,

file_1.list 

Другими словами, как именно вы назвали метод другого экземпляра, file_1.create.

Вы также используете @@ ... необычным способом. Насколько я могу судить, вы имеете в виду те переменные, которые являются переменными, которые требуют только одного @.

Несвязанный, но ставящий public перед каждым публичным методом шумно и не нужно. На самом деле, я бы сказал, только поместил private, однажды, перед коллекцией частных методов.

+0

я вижу вашу точку проблема в том ... 'file_1 = Computer_create.new ("FileTest") file_1.create ("FileTest") file_2 = Computer_create.new ("FileTest2") file_2.create («FileTest2») file_1.list file_2.list' он просто распечатывает, что файлы filetest 1 и 2 были созданы. что я пытаюсь сделать, это показать все файлы, которые у меня есть в моем массиве. но ничего не появляется. – MalumAtire832

+0

@ MalumAtire832 Вы ничего не печатаете. https://ideone.com/hAYfQX –

Смежные вопросы