扩展 Scala 特性的对象。 Ruby相当于?

Objects Extending Scala traits. Ruby equivalent?

在 Scala 中,我可以编写一个实现特征的单例对象。

trait Greeter {
  def greet = "Hello"
}
object MyGreeterObject extends Greeter

然后我就可以很容易地在我的测试中模拟 Greeter

var mockGreeter = new Greeter { 
  override def greet = "I'm a mock"
}

在 Ruby 中是否有等效的方法?最终,我希望能够模拟一些不需要状态并且最好由对象级方法提供(无论如何在 Scala 中)的方法。一旦我有了这个,我希望能够模拟我的测试。

在Ruby中称为Mixin,由Modules实现

module Greeter
  def greet
    'Hello'
  end
end

# extending a specific object
o = Object.new.extend(Greeter)
p o.greet

# creating a specific class
MyGreeter = Class.new.extend(Greeter)
p MyGreeter.greet

但在 Ruby 中模拟非常简单。它不依赖于构建对象的方式。查看您最喜欢的 Ruby 测试框架的文档。

o = Object.new
o.expect(:greet, 'Hi, I am a mock')
p o.greet