Ruby 模块是否等同于 Java 接口?
据我所知,接口是Java旨在通过为实现要填充的接口的类设置方法来强制执行设计。这也是 Ruby 模块的想法吗?我看到就像Java中的接口一样,你不能在Ruby中实例化模块。
据我所知,接口是Java旨在通过为实现要填充的接口的类设置方法来强制执行设计。这也是 Ruby 模块的想法吗?我看到就像Java中的接口一样,你不能在Ruby中实例化模块。
简短的答案是否定的。
下面是推理,Java/C# 接口定义了实现类至少将提供的方法签名。
此外:
例:
module SimpleConversation
class NamespacedExample
def poke
puts "ouch"
end
end
attr_accessor :partner_name
def converse
partner_name ||= "Slowpoke"
speak + "\n#{partner_name}: Yes they are"
end
def self.yay
puts "yay"
end
end
class Foo
include SimpleConversation
attr_accessor :name
def speak
name ||= "Speedy"
"#{name}: tacos are yummy"
end
end
x = Foo.new
x.name = "Joe"
x.partner_name = "Max"
puts x.speak
puts x.converse
y = SimpleConversation::NamespacedExample.new
y.poke
SimpleConversation.yay
我想我会把一个模块等同于更类似于C#中的扩展方法。您正在向实际在其他地方定义的现有类添加功能。在C#或Java中没有确切的模拟,但我绝对不会将其视为接口,因为实现和接口一样派生。