首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用鸭子类型?

如何使用鸭子类型?
EN

Stack Overflow用户
提问于 2011-01-22 21:45:33
回答 3查看 103关注 0票数 1

我应该如何调用使用鸭子打字的过程?我该怎么说“我在做鸭子打字”或者“我在检查它是不是鸭子:)”。

鸭检查听起来不太好,类型检查只是简单的错误名称。

EN

回答 3

Stack Overflow用户

发布于 2011-01-22 21:49:16

我会说,我在用鸭子打字。虽然它们是不同的东西,但它与“我正在使用静态输入”是一样的。

票数 2
EN

Stack Overflow用户

发布于 2011-01-22 22:15:15

我认为上下文在这里很重要,我们是在谈论内联评论还是整体设计文档?

对于设计文档,我认为说我正在使用鸭子打字是相当合理的。

在代码中给定的一点上,我不确定这样说是否有用。考虑一下,用一些虚构的语言

代码语言:javascript
运行
复制
 function wibble(anObject) {

      // what do we say here? 
      anObject.computeMedianValue();

      anObject.render(device);
 }

首先要注意的是,我们并没有实际检查它是一个鸭子,在我看到的示例中,代码是这样的

代码语言:javascript
运行
复制
 obj.quack()

程序结构通常安排,只有那些能嘎嘎作响的东西才能传下去。我看不出多少例子

代码语言:javascript
运行
复制
if (obj can quack )
  obj.quack()
else if ( obj can grunt)
  obj.grunt()

这并不是非常多态的,但是即使我们确实想检查功能,我们也不会编写代码。

代码语言:javascript
运行
复制
if ( obj isA duck)

鸭子输入的全部思想是考虑我们在当前环境中需要的特定功能--走路(像鸭子)、庸医(像鸭子)--而不是“它是鸭子吗?”

因此,在代码中,我不会特别引用鸭子类型,就像我在标准Java程序周围执行面向对象的操作一样。注释可能会说出为什么你知道这个对象可以计算一个中值,或者如果它不能的话该怎么做。

票数 0
EN

Stack Overflow用户

发布于 2017-07-28 11:08:28

鸭型

这个名字来源于这样的短语:

如果它看起来像鸭子,游泳像鸭子,叫声像鸭子,那么它很可能是鸭子。

https://en.wikipedia.org/wiki/Duck_test

这意味着,如果它拥有鸭子的所有相关属性,那么为什么还要仔细地进行测试来检查它是否是鸭子以外的东西呢?

它可能不是一只鸭子,但大多数人不会在意,因为它就像鸭子一样,在那些方面现在很重要。

鸭类型在这种情况下是相似的:为什么要费心控制参数和变量的类型,以限制用户可以执行的操作。

传递给函数的类型并不重要,只要操作仍然在任何类型上工作。

如果您可以添加两种类型,谁在乎它们是哪一种类型呢?

如果传递给paginateResult()函数的对象有一个query(),并且有一个get_next_result()方法,那么它是什么类型有什么关系?

在静态类型语言中,对象必须是queryResult的子类或实现paginates接口。

https://en.wikipedia.org/wiki/Duck_typing

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4770808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档