我应该如何调用使用鸭子打字的过程?我该怎么说“我在做鸭子打字”或者“我在检查它是不是鸭子:)”。
鸭检查听起来不太好,类型检查只是简单的错误名称。
发布于 2011-01-22 21:49:16
我会说,我在用鸭子打字。虽然它们是不同的东西,但它与“我正在使用静态输入”是一样的。
发布于 2011-01-22 22:15:15
我认为上下文在这里很重要,我们是在谈论内联评论还是整体设计文档?
对于设计文档,我认为说我正在使用鸭子打字是相当合理的。
在代码中给定的一点上,我不确定这样说是否有用。考虑一下,用一些虚构的语言
function wibble(anObject) {
// what do we say here?
anObject.computeMedianValue();
anObject.render(device);
}首先要注意的是,我们并没有实际检查它是一个鸭子,在我看到的示例中,代码是这样的
obj.quack()程序结构通常安排,只有那些能嘎嘎作响的东西才能传下去。我看不出多少例子
if (obj can quack )
obj.quack()
else if ( obj can grunt)
obj.grunt()这并不是非常多态的,但是即使我们确实想检查功能,我们也不会编写代码。
if ( obj isA duck)鸭子输入的全部思想是考虑我们在当前环境中需要的特定功能--走路(像鸭子)、庸医(像鸭子)--而不是“它是鸭子吗?”
因此,在代码中,我不会特别引用鸭子类型,就像我在标准Java程序周围执行面向对象的操作一样。注释可能会说出为什么你知道这个对象可以计算一个中值,或者如果它不能的话该怎么做。
发布于 2017-07-28 11:08:28
鸭型
这个名字来源于这样的短语:
如果它看起来像鸭子,游泳像鸭子,叫声像鸭子,那么它很可能是鸭子。
https://en.wikipedia.org/wiki/Duck_test
这意味着,如果它拥有鸭子的所有相关属性,那么为什么还要仔细地进行测试来检查它是否是鸭子以外的东西呢?
它可能不是一只鸭子,但大多数人不会在意,因为它就像鸭子一样,在那些方面现在很重要。
鸭类型在这种情况下是相似的:为什么要费心控制参数和变量的类型,以限制用户可以执行的操作。
传递给函数的类型并不重要,只要操作仍然在任何类型上工作。
如果您可以添加两种类型,谁在乎它们是哪一种类型呢?
如果传递给paginateResult()函数的对象有一个query(),并且有一个get_next_result()方法,那么它是什么类型有什么关系?
在静态类型语言中,对象必须是queryResult的子类或实现paginates接口。
https://stackoverflow.com/questions/4770808
复制相似问题