我有以下代码:
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
我意识到这段代码遗漏了一些东西,但我不知道那是什么。
答案 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