问题标签 [duck-typing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
657 浏览

c# - C#。为遗留代码添加多态性

假设我们有不能修改的遗留类:

我想用这样的签名写一个助手:

请注意,第一个参数的类型是“对象”。测试代码应该是这样的:

问题是,除了这些之外,您还可以想象什么实现:

谢谢!

0 投票
11 回答
2186 浏览

java - 我如何反对像 Java 这样的强类型语言中的 Duck 类型?

我在一个 Java 程序员团队中工作。我的一位同事不时建议我做一些类似“只需添加一个类型字段”(通常是“字符串类型”)的事情。或者代码将被提交满载“ if (foo instanceof Foo){...} else if( foo instanceof Bar){...}”。

尽管 Josh Bloch 告诫说“标记类是对适当类层次结构的模仿”,但我对这类事情的单线反应是什么?然后我如何更认真地阐述这个概念?

我很清楚 - 上下文是 Java - 所考虑的对象类型就在我们集体面前 - IOW:紧跟在“类”、“枚举”或“接口”等之后的词。

但除了难以演示或量化(现场)“它使你的代码更复杂”之外,我怎么说“用(或多或少)强类型语言进行鸭式打字是一个愚蠢的想法,暗示了更深层次的设计病态?

0 投票
7 回答
1271 浏览

java - 除了动态类型之外,是什么让 Ruby 比 Java“更灵活”?

几乎从 Java 首次问世以来,我就一直在使用它,但在过去的五年中,我已经厌倦了完成即使是最简单的事情变得多么复杂。在我的精神科医生的推荐下,我开始学习 Ruby,呃,我的意思是我的同事(更年轻、更酷的同事——他们使用 Mac!)。无论如何,他们不断重复的一件事是,与 Java 等较旧、更受打击的语言相比,Ruby 是一种“灵活”的语言,但我真的不知道这意味着什么。有人可以解释是什么让一种语言比另一种语言“更灵活”吗?请。我有点理解动态类型的意义,并且可以看到这对简洁有什么好处。Ruby 语法非常漂亮。还有什么?动态类型是主要原因吗?

0 投票
5 回答
920 浏览

c# - C# 和接口 - 显式与隐式

在 C# 中,如果一个类具有接口的所有正确方法/签名,但没有像这样显式实现它:

该类仍然可以转换为该接口吗?

0 投票
8 回答
48773 浏览

python - 如何判断 python 变量是字符串还是列表?

我有一个将字符串列表作为参数的例程,但我想支持传入单个字符串并将其转换为一个字符串列表。例如:

我的函数如何判断传入的是字符串还是列表?我知道有一个type功能,但有没有“更pythonic”的方式?

0 投票
5 回答
555 浏览

c#-4.0 - 有没有一种融合了动态类型和强类型优势的理想语言?

我有兴趣学习一种在内部将对象处理为哈希表(如 JavaScript)但可以用强类型包装它们以在设计时提供代码完成/智能感知的好处的语言。以下是我希望这种梦幻语言发挥作用的方式:

我希望这个程序能够无误编译、无异常运行并在控制台上打印 “Miauew”。有没有一种语言可以做到这一点?也许是 C#4.0?

0 投票
4 回答
540 浏览

oop - 在强类型 OOP 语言中进行鸭子类型的参数?

有没有用这种语言(例如 C#、Java)写过东西,却错过了鸭子打字的情况?(有关反对鸭子类型的论点,请参阅此问题)

0 投票
10 回答
21205 浏览

java - 什么是 Java 中的鸭子类型的示例?

我最近刚听说过鸭子类型,并且阅读了有关它的Wikipedia 文章,但是我很难将这些示例翻译成 Java,这确实有助于我的理解。

任何人都能够给出一个在 Java 中进行鸭式输入的清晰示例以及我可能如何使用它?

0 投票
4 回答
477 浏览

python - 游戏设计 - 处理奖金/鸭子打字 - python

我目前在我的游戏设计中面临一个设计问题,并不可怕,但它让我很困扰,所以我想问问其他人的意见:-)

我目前正在试验 pygame,我开发了一个小型太空射击游戏,现在我想处理一些奖金。

现在我有一个抽象类 Bonus 从中派生当前实现的所有奖金:一个“健康奖金”,它给玩家一些健康,一个“死亡奖金”,它把玩家的健康降低到 1。

在我的游戏循环中,这是我所做的(大致):

在我告诉玩家使用奖金之后

到目前为止一切都还好,但我想添加一个“炸弹奖励”,当玩家射击时会爆炸并杀死周围的敌人。

这个“奖金”实现了我的抽象类 Bonus 的“use(target)”方法,但我觉得在玩家的奖金列表中添加这样的奖金有点糟糕,因为它们之间不应该有任何关系!

奖金背后的概念是,这是“对某事做某事的事情”,以前是我的玩家班级的目标,但现在还不清楚......当然,而不是在检测到哪些奖金在哪里之后调用 player.useBonuses()拍摄我可以测试类型(使用 isinstance),例如奖金,但在我读过所有关于鸭子打字的讨论之后,为什么它是 pythonic 方式我想知道如何管理我的奖金问题?

感谢您阅读本文,希望你们能帮助我!

问候

0 投票
1 回答
169 浏览

dynamic-languages - 鸭子打字——当你需要一个具体的类型时怎么办?

假设您正在使用动态语言(Python 等)进行计算器,并且您有一个 add 方法。

现在,如果您要传入除错误数字之外的任何内容,那么您需要进行一些数据类型检查。

Duck Typing 是关于对象而不是上面例子中的参数吗?

谁能进一步解释?

编辑

我的意思是:

不关心传递给方法的内容。