2016-04-15 3 views
1

Я новичок в рубине и программировании в целом, и у меня возникают некоторые проблемы с методами, которые могут работать из другого класса. Метод, который я пытаюсь добраться до работы new_employee и ее вариант 2, если вы запустите business.rb business.rb файл содержит класс бизнесRUBY - Как вызвать метод из другого класса

class Business 
    attr_accessor :name 

    def run 
    self.welcome 
    end 

    def welcome 
    while true 
     puts "Welcome to Team Green Turf! What do you want to do today?" 
     puts "1. Add new customer" 
     puts "2. Add new employee" 
     puts "3. View current revenue" 
     choice = gets.chomp.to_i 

     case choice 
     when 1 
      puts "hello!" 
     when 2 
      puts new_employee() 
     when 3 
      exit 

     end 
    end 
    end 
end 

team_green_turf = Business.new 
team_green_turf.run 

------------ ---------------------

employees.rb файл

require_relative 'business' 

class Employees 

    attr_accessor :name 

    def initialize(name) 
    @name = name 
    end 

    def new_employee(name) 
    puts "What is the employees name?" 
    name = gets.chomp 
    e1 = Employees.new(name) 
    end 


end 

ответ

1

Есть две основные идеи:

  1. Вам нужно для обеспечения что интерпретатор Ruby загрузил файл, содержащий этот метод, прежде чем пытаться его вызвать. В вашем случае вы выполняете код в botton business.rb до того, как файл employees.rb был полностью загружен, поэтому класс Employee и его методы не будут определены. Вы можете исправить это по-разному, но я предлагаю двигаться последние две строки business.rb в свой собственный файл с именем run.rb и положить require_relative 'business' в верхней части run.rb и положить require_relative 'employees' в верхней части business.rb, и удаление require_relative 'business' из верхней от employees.rb. (Класс Employees фактически не использует или не зависит от класса Business, поэтому не имеет смысла его требовать.)
  2. Вам необходимо предоставить правильные префиксы методу, чтобы его можно было вызвать. В вашем случае вы хотите вызвать функцию из класса Business, вы должны написать Employees.new_employee. Вам также необходимо будет изменить new_employee как метод класса, поставив self. перед его именем, когда вы его определяете: def self.new_employee(name)....
+0

Большое вам спасибо! Я заработал! Итак, чтобы метод класса всегда ставил self.methodname ?? Было бы разумно, почему ни один из моих методов не работает. –

+0

Да, вот как вы делаете метод класса. –