问题标签 [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.
c# - C#。为遗留代码添加多态性
假设我们有不能修改的遗留类:
我想用这样的签名写一个助手:
请注意,第一个参数的类型是“对象”。测试代码应该是这样的:
问题是,除了这些之外,您还可以想象什么实现:
谢谢!
java - 我如何反对像 Java 这样的强类型语言中的 Duck 类型?
我在一个 Java 程序员团队中工作。我的一位同事不时建议我做一些类似“只需添加一个类型字段”(通常是“字符串类型”)的事情。或者代码将被提交满载“ if (foo instanceof Foo){...} else if( foo instanceof Bar){...}
”。
尽管 Josh Bloch 告诫说“标记类是对适当类层次结构的模仿”,但我对这类事情的单线反应是什么?然后我如何更认真地阐述这个概念?
我很清楚 - 上下文是 Java - 所考虑的对象类型就在我们集体面前 - IOW:紧跟在“类”、“枚举”或“接口”等之后的词。
但除了难以演示或量化(现场)“它使你的代码更复杂”之外,我怎么说“用(或多或少)强类型语言进行鸭式打字是一个愚蠢的想法,暗示了更深层次的设计病态?
java - 除了动态类型之外,是什么让 Ruby 比 Java“更灵活”?
几乎从 Java 首次问世以来,我就一直在使用它,但在过去的五年中,我已经厌倦了完成即使是最简单的事情变得多么复杂。在我的精神科医生的推荐下,我开始学习 Ruby,呃,我的意思是我的同事(更年轻、更酷的同事——他们使用 Mac!)。无论如何,他们不断重复的一件事是,与 Java 等较旧、更受打击的语言相比,Ruby 是一种“灵活”的语言,但我真的不知道这意味着什么。有人可以解释是什么让一种语言比另一种语言“更灵活”吗?请。我有点理解动态类型的意义,并且可以看到这对简洁有什么好处。Ruby 语法非常漂亮。还有什么?动态类型是主要原因吗?
c# - C# 和接口 - 显式与隐式
在 C# 中,如果一个类具有接口的所有正确方法/签名,但没有像这样显式实现它:
该类仍然可以转换为该接口吗?
python - 如何判断 python 变量是字符串还是列表?
我有一个将字符串列表作为参数的例程,但我想支持传入单个字符串并将其转换为一个字符串列表。例如:
我的函数如何判断传入的是字符串还是列表?我知道有一个type
功能,但有没有“更pythonic”的方式?
c#-4.0 - 有没有一种融合了动态类型和强类型优势的理想语言?
我有兴趣学习一种在内部将对象处理为哈希表(如 JavaScript)但可以用强类型包装它们以在设计时提供代码完成/智能感知的好处的语言。以下是我希望这种梦幻语言发挥作用的方式:
我希望这个程序能够无误编译、无异常运行并在控制台上打印 “Miauew”。有没有一种语言可以做到这一点?也许是 C#4.0?
oop - 在强类型 OOP 语言中进行鸭子类型的参数?
有没有用这种语言(例如 C#、Java)写过东西,却错过了鸭子打字的情况?(有关反对鸭子类型的论点,请参阅此问题)
java - 什么是 Java 中的鸭子类型的示例?
我最近刚听说过鸭子类型,并且阅读了有关它的Wikipedia 文章,但是我很难将这些示例翻译成 Java,这确实有助于我的理解。
任何人都能够给出一个在 Java 中进行鸭式输入的清晰示例以及我可能如何使用它?
python - 游戏设计 - 处理奖金/鸭子打字 - python
我目前在我的游戏设计中面临一个设计问题,并不可怕,但它让我很困扰,所以我想问问其他人的意见:-)
我目前正在试验 pygame,我开发了一个小型太空射击游戏,现在我想处理一些奖金。
现在我有一个抽象类 Bonus 从中派生当前实现的所有奖金:一个“健康奖金”,它给玩家一些健康,一个“死亡奖金”,它把玩家的健康降低到 1。
在我的游戏循环中,这是我所做的(大致):
在我告诉玩家使用奖金之后
到目前为止一切都还好,但我想添加一个“炸弹奖励”,当玩家射击时会爆炸并杀死周围的敌人。
这个“奖金”实现了我的抽象类 Bonus 的“use(target)”方法,但我觉得在玩家的奖金列表中添加这样的奖金有点糟糕,因为它们之间不应该有任何关系!
奖金背后的概念是,这是“对某事做某事的事情”,以前是我的玩家班级的目标,但现在还不清楚......当然,而不是在检测到哪些奖金在哪里之后调用 player.useBonuses()拍摄我可以测试类型(使用 isinstance),例如奖金,但在我读过所有关于鸭子打字的讨论之后,为什么它是 pythonic 方式我想知道如何管理我的奖金问题?
感谢您阅读本文,希望你们能帮助我!
问候
dynamic-languages - 鸭子打字——当你需要一个具体的类型时怎么办?
假设您正在使用动态语言(Python 等)进行计算器,并且您有一个 add 方法。
现在,如果您要传入除错误数字之外的任何内容,那么您需要进行一些数据类型检查。
Duck Typing 是关于对象而不是上面例子中的参数吗?
谁能进一步解释?
编辑
我的意思是:
不关心传递给方法的内容。