【发布时间】:2011-03-31 03:36:05
【问题描述】:
我目前正在尝试学习 Ruby,并且正在尝试更多地了解它在封装和合同方面提供的功能。
在 C# 中,可以使用接口定义合同。实现接口的类必须通过为定义的每个方法和属性(可能还有其他东西)提供实现来满足合同中的条款。实现接口的单个类可以在契约定义的方法范围内做任何事情,只要它接受相同类型的参数并返回相同类型的结果。
有没有办法在 Ruby 中强制执行这种事情?
谢谢
我在 C# 中的意思的一个简单示例:
interface IConsole { int MaxControllers {get;} void PlayGame(IGame game); } class Xbox360 : IConsole { public int MaxControllers { get { return 4; } } public void PlayGame(IGame game) { InsertDisc(game); NavigateToMenuItem(); Click(); } } class NES : IConsole { public int MaxControllers { get { return 2; } } public void PlayGame(IGame game) { InsertCartridge(game); TurnOn(); } }
【问题讨论】:
-
在我看来,没有一种语言的接口是一个可怕的设计决定。
-
在 Ruby(以及所有语言)中有有个接口——它们只是不是一种语言特性,因此编译器不会强制执行。同样,我可以说关于 C/C++/Java/C#/... 的“语言中没有整数对我来说似乎是一个可怕的设计决定”——如果重要的话,你会得到构建它们的工具你。但大多数时候,我们只是在一个非常小的整数子集上使用模运算,而我们的软件通常可以正常工作。没有人死。
-
很确定您在插入墨盒之前忘记吹气......
标签: c# ruby interface contract equivalent