小编gee*_*zyx的帖子

Ruby - 类方法中的引用子类

不确定这对于 Ruby 是否可行,但我正在尝试编写一个包含多个方法的类,这些方法将由多个子类共享。这个超类将包含我希望子类继承的类和实例方法。假设我永远不会直接使用超类,我只是用它来抽象出重复的方法(认为是 DRY)。这涉及到常量(API URI)会随着子类的不同而改变。

这是我正在尝试做的事情的一个例子:

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
Run Code Online (Sandbox Code Playgroud)

我想要的行为是这样的:

Bar.get
puts Bar.param # => Woot
Baz.get
puts baz.param # => Pew Pew
Run Code Online (Sandbox Code Playgroud)

这可能吗?我是否以完全错误的方式处理这个问题?

更新

根据@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)> …
Run Code Online (Sandbox Code Playgroud)

ruby inheritance class

3
推荐指数
1
解决办法
2090
查看次数

标签 统计

class ×1

inheritance ×1

ruby ×1