Tag: by contract

Ruby和duck打字:合同设计不可能?

Java中的方法签名: public List getFilesIn(List directories) 类似的ruby def get_files_in(directories) 对于Java,类型系统为我提供了有关该方法所期望和提供的信息。 在Ruby的情况下,我不知道我应该传递什么,或者我期望收到什么。 在Java中,对象必须正式实现接口。 在Ruby中,传入的对象必须响应此处定义的方法中调用的任何方法。 这似乎很成问题: 即使拥有100%准确,最新的文档,Ruby代码也必须公开其实现,打破封装。 除了“OO纯度”,这似乎是一个维护噩梦。 Ruby代码让我不知道返回了什么; 我必须基本上进行实验,或者阅读代码以找出返回对象将响应的方法。 不打算讨论静态打字与鸭子打字,而是希望了解如何维护一个几乎没有合同设计能力的生产系统。 更新 没有人真正通过这种方法所需的文档来解决方法内部实现的暴露问题。 由于没有接口,如果我不期望某个特定类型,我不必逐条列出我可能调用的每个方法,以便调用者知道可以传入什么内容吗? 或者这只是一个没有真正出现的边缘案例?