2016-04-15 23 views
1

私はRubyとプログラミング全般に新しく、別のクラスから作業するメソッドを取得する際にいくつかの問題があります。私は仕事に取得しようとしている方法は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インタープリターがメソッドを含むファイルをロードしていることを確認してください。あなたの場合、employees.rbファイルが完全にロードされる前に、business.rbのボトルトンでコードを実行しているので、Employeeクラスとそのメソッドは定義されません。これをさまざまな方法で修正できますが、最後の2行のbusiness.rbrun.rbというファイルに移動し、を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

そうですね、あなたがクラスメソッドを作る方法です。 –

関連する問題