2016-04-15 34 views
1

Ich bin neu in Ruby und Programmierung im Allgemeinen und ich habe einige Probleme bekommen Methoden von einer anderen Klasse zu arbeiten. Die Methode Ich versuche, zur Arbeit zu kommen ist new_employee und seine Option 2, wenn Sie die business.rb business.rb Datei enthält Klasse GeschäftsRUBY - So rufen Sie eine Methode aus einer anderen Klasse

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 

laufen ------------ ---------------------

employees.rb Datei

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 

Antwort

1

Es gibt zwei Hauptideen:

  1. Sie benötigen sicherstellen dass der Ruby-Interpreter die Datei geladen hat, die die Methode enthält, bevor Sie versuchen, sie aufzurufen. In Ihrem Fall führen Sie den Code im unteren Bereich von business.rb aus, bevor die employees.rb Datei vollständig geladen wurde, so dass die Klasse Employee und ihre Methoden nicht definiert werden. Sie können dies auf viele verschiedene Arten beheben, aber ich schlage vor, die letzten beiden Zeilen von business.rb in ihre eigenen Datei run.rb und setzen require_relative 'business' an der Spitze der run.rb und setzen require_relative 'employees' an der Spitze der business.rb und Entfernen des require_relative 'business' von oben genannten beweglichen von employees.rb. (Die Klasse Employees verwendet oder verwendet die Klasse Business nicht, daher ist es nicht sinnvoll, sie zu verlangen.)
  2. Sie müssen der Methode die richtigen Präfixe bereitstellen, damit sie aufgerufen werden kann. In Ihrem Fall möchten Sie die Funktion aus der Klasse Business aufrufen, die Sie schreiben würden Employees.new_employee. Sie müssten auch new_employee als Klassenmethode ändern, indem Sie self. vor seinem Namen eingeben, wenn Sie ihn definieren: def self.new_employee(name)....
+0

Vielen Dank! Ich habe es zur Arbeit gebracht! Also um eine Klassenmethode zu machen, setze immer self.methodname ?? Das würde Sinn machen, warum keine meiner Methoden funktioniert hat. –

+0

Ja, so machen Sie eine Klassenmethode. –

Verwandte Themen