RUBY - 如何从另一个类调用方法

时间:2016-04-15 20:55:45

标签: ruby methods

我是ruby和一般编程的新手,我遇到一些问题,让方法可以从另一个类开始工作。我试图开始工作的方法是new_employee,如果你运行business.rb,它的选项2 business.rb文件包含类Business

  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 个答案:

答案 0 :(得分:1)

主要有两个想法:

  1. 在尝试调用之前,您需要确保Ruby解释器已加载包含该方法的文件。在您的情况下,您在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)...