不知道這是否可以用Ruby,但我想用一些子類共享的幾個方法編寫一個類。這個超類將包含我希望子類繼承的類和實例方法。假設我將永遠不會直接使用超類,我只用它來抽象出重複的方法(思考DRY)。這涉及具有將從子類更改爲子類的常量(API URI)。Ruby類 - 類方法中的引用子類
這裏是什麼,我試圖做一個例子:
class Foo
attr_accessor :param
def initialize(param)
@param = param
end
def self.get
<SubClass>.new(self::MY_CONSTANT)
end
end
class Bar < Foo
MY_CONSTANT = 'Woot'
end
class Baz < Foo
MY_CONSTANT = 'Pew Pew'
end
我想要的行爲是這樣的:
Bar.get
puts Bar.param # => Woot
Baz.get
puts baz.param # => Pew Pew
這可能嗎?我是否完全錯誤地接近了這一點?
更新
每@Nathan,self.new
在self.get
方法奏效了這裏。
[39] pry(main)> test = Bar.get
=> #<Bar:0x000001072ecc20 @param="Woot">
[40] pry(main)> test.param
=> "Woot"
[41] pry(main)> test
=> #<Bar:0x000001072ecc20 @param="Woot">
[42] pry(main)> test.class
=> Bar
[43] pry(main)> test2 = Baz.get
=> #<Baz:0x000001071b5528 @param="Pew Pew">
[44] pry(main)> test2.class
=> Baz
[45] pry(main)> test2.param
=> "Pew Pew"
你可能會發現它有助於你的代碼'puts'語句賦予你'self'的價值。例如,'class Klass; def my_method;把自己放在#{__ method__} =#{self}「;結束;結束; Klass.new.my_method#=> self in my_method =#'。 –