调用没有实例的方法

时间:2015-12-05 15:27:15

标签: ruby

我有以下代码:

class Cars
  attr_accessor :car_make
  attr_accessor :car_model
  def initialize(make, model)
    self.car_make = make
    self.car_model = model
  end
end

我想知道是否可以实现list_cars方法 并像这样调用方法:

ford = Cars.new("Ford" ,"F-150")
honda = Cars.new("Honda", "CRV")
list_cars(ford, honda)

即,不必从现有对象中调用它。我试过这个:

def list_cars(first_car, second_car)
  puts "My father has two cars - a #{first_car.car_make} #{first_car.car_model} and a #{second_car.car_make} #{second_car.car_model}."
end

我意识到这段代码遗漏了一些东西,但我不知道那是什么。

2 个答案:

答案 0 :(得分:2)

使它成为一种类方法:

class Cars
  def self.list_cars(first_car, second_car)
    puts "My father has two cars - a #{first_car.car_make} #{first_car.car_model} and a #{second_car.car_make} #{second_car.car_model}."
  end
end

然后你可以简单地通过以下方式调用它:

Cars.list_cars(car1, car2)

您可以找到有关类方法at rubymonk的更多信息。

如果这是正确的方式(或新模块,或作为对象空间中的方法)取决于您的项目架构。

答案 1 :(得分:1)

Markus的回答是人们通常会这样做的方式(并且可能是首选的方式,因为它不会污染主命名空间)。但这不是你想要的解决方案。为了做到你想要的,你通常在Kernel上实现这个方法。

module Kernel
  def list_cars(first_car, second_car)
    puts "My father has two cars - a #{first_car.car_make} #{first_car.car_model} and a #{second_car.car_make} #{second_car.car_model}."
  end
end