假设我有一节课:

class Person
  def self.say
    puts "hello"
  end
end

还有一个子类:
  class Woman < Person
  end

我希望“say”方法是公共方法,但我不希望它被“woman”或任何其他子类继承。正确的方法是什么?
我不想重写该方法,因为我不知道未来的子类。
我知道我可以使用类似于remove_method的方法,但我更希望根本不继承该方法

最佳答案

我想在基类中有一个静态方法,它根据我提供的参数找到一个子类
在其他地方定义静态方法,例如在模块中:

module Person

  class Base
  end

  class Woman < Base
  end

  def self.create(name)
    case name
    when :woman
      Woman.new
    end
  end

end

Person.create(:woman)          # => #<Person::Woman:0x007fe5040619e0>
Person::Woman.create(:woman)   # => undefined method `create' for Person::Woman:Class

关于ruby - Ruby:创建一个不可继承的类方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17168780/

10-12 22:28