gpt4 book ai didi

java - Ruby 模块是否等同于 Java 接口(interface)?

转载 作者:IT老高 更新时间:2023-10-28 20:51:59 26 4
gpt4 key购买 nike

据我了解,接口(interface)是 Java 旨在通过为实现接口(interface)的类布置方法来强制设计。这也是 Ruby 模块的想法吗?我看到就像 Java 中的接口(interface)一样,您无法在 Ruby 中实例化模块。

最佳答案

简短的回答是否定的。

推理如下,Java/C# 接口(interface)定义了实现类将提供的至少方法签名。

另外:

  • 对于 ruby​​ 模块,由于鸭式打字,因此没有这样的契约(Contract)。
  • 模块只是提取常用功能以便于重复使用的一种方式。最接近的关系是 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

关于java - Ruby 模块是否等同于 Java 接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/575920/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com