问题标签 [dynamic-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 投票
3 回答
418 浏览

python - 在 Python 中强制/转换为正确类型的最佳位置

我对 Python 还是很陌生,我正在努力适应它的动态类型。有时我有一个函数或一个类,它需要一个特定类型的参数,但可能会得到另一个对其强制的类型的值。例如,它可能期望 afloat但接收的是 int 或小数。或者它可能期望一个字符串,而是接收一个定义__str__特殊方法的对象。

将参数强制为正确类型(及其原因)的最佳实践是什么?我是在函数/类中还是在调用者中执行此操作?如果在调用者中,我是否也在函数中检查它?例如。

备选方案 1:

备选方案 2:

备选方案 3:

我已经阅读了这个答案这个答案,他们说在 Python 中检查类型是“坏的”,但我不想浪费时间追踪非常简单的错误,这些错误会被编译器以静态类型的方式立即拾取语言。

0 投票
4 回答
2144 浏览

design-patterns - OOP 和动态类型(不是静态与动态)

与静态类型环境(例如 Ruby 与 C#)相比,哪些 OOP 原则(如果有)在动态类型环境中不适用或应用方式不同?这不是要求进行静态与动态辩论,而是我想看看在该分歧的任何一方是否有公认的原则适用于一方而不适用于另一方,或者适用不同的原则。在静态类型的 OOP 文献中,诸如“更喜欢组合而不是继承”之类的短语是众所周知的。它们是否同样适用于动态方面?

例如,在动态类型环境中,耦合的粒度似乎不超过方法的级别。换句话说,任何给定的函数调用只会将调用者耦合到任何类都可能满足的特定接口 - 或者换句话说,任何像特定鸭子一样嘎嘎叫的东西。

另一方面,在 Java 中,耦合的粒度可以与包一样高。一个特定的方法调用不仅与另一个类/接口建立契约,而且还将它耦合到该类/接口的包/jar/程序集中。

这样的差异会导致不同的原则和模式吗?如果是这样,这些差异是否已经阐明?Ruby Pickaxe书中有一个部分朝这个方向发展(Duck Typing/Classes Aren't Types),但我想知道是否还有其他内容。我知道Ruby 中的设计模式,但还没有读过。

编辑——有人认为Liskov在动态环境中的应用与在静态环境中的应用不同,但我不禁认为它确实如此。一方面,整个班级没有高级别的合同。但是,不是所有对任何给定类的调用都构成了一个隐式契约,需要按照 Liskov 规定的方式由子类来满足吗?考虑以下。“做一些酒吧的事情”中的调用创建了一个需要由子类参与的合同。这不是“将专用对象视为基类”的情况吗?

0 投票
3 回答
1875 浏览

objective-c - 在 Objective-C 中将对象类型转换为子类对象类型

假设我有 A 类和 B 类。B 类是 A 类的子类。A 类包含一些属性,然后 B 类通过添加一些特定于该子类的附加属性来扩展 A 类超类。我已经创建了一个 A 类对象,现在希望在运行时将该对象转换为 B 类类型对象,这样我就可以将数据添加到 B 类提供的附加属性中。在 Objective-C 中有什么方法可以做到这一点? 谢谢!

0 投票
3 回答
149 浏览

objective-c - 动态类型的类在方法选择上生成编译器警告

也许这是解决此问题的错误方法,但它似乎是一种干净且可行的方法,我想知道如何使编译器警告消失?

现在,看看 RelatedClass 的实现......

这似乎是一种有效的方法,所以我想知道为什么会出现警告?有没有办法更好地向编译器“解释”这一点?

如果鼓励这种类型的链接,或者是否有更好的方法来链接两个需要相互通信的相关、相互依赖的类,有人可以分享一下吗?

我不能在 RelatedClass 中静态声明发件人对象(SomeView),因为这似乎会导致递归问题,因为 SomeView 是使用 RelatedClass 作为成员定义的......

有什么建议么?

0 投票
5 回答
7165 浏览

programming-languages - 哪些语言是动态类型和编译的(哪些是静态类型和解释的)?

在我阅读动态和静态类型时,我一直反对静态类型语言被编译,而动态类型语言被解释的假设。我知道总的来说这是正确的,但我对例外情况很感兴趣。

我真的很希望有人不仅给出这些例外的一些例子,而且试图解释为什么决定这些语言应该以这种方式工作。

0 投票
10 回答
78302 浏览

terminology - 静态/动态与强/弱

我看到这些术语在编程中到处都是,我对它们的含义有一个模糊的概念。搜索显示,实际上在堆栈溢出中已经询问过这样的事情。据我所知,语言中的静态/动态输入与强/弱输入略有不同,但我不知道这种差异是什么。不同的来源似乎使用不同的含义,甚至可以互换使用这些术语。我找不到可以谈论两者并实际上说明差异的地方。如果有人可以在这里为我和世界其他地方清楚地说明这一点,那就太好了。

0 投票
2 回答
3325 浏览

database - SQLite3 的动态类型

与其他风格的 SQL 相比,SQLite3 使用动态类型而不是静态类型。SQLite 网站内容如下:

大多数 SQL 数据库引擎(据我们所知,除 SQLite 之外的每个 SQL 数据库引擎)都使用静态、严格的类型。使用静态类型,值的数据类型由其容器决定——存储该值的特定列。

SQLite 使用更通用的动态类型系统。在 SQLite 中,值的数据类型与值本身相关联,而不是与其容器相关联。

在我看来,这正是您想要的,因为它允许您将字符串存储在整数列中。

页面继续:

... SQLite 中的动态类型允许它完成传统刚性类型数据库中不可能完成的事情。

我有两个问题:

  1. 用例问题:SQLite3 的动态类型有哪些好处?
  2. 历史/设计问题:使用动态类型实现 SQLite 的动机是什么?
0 投票
9 回答
11160 浏览

programming-languages - 是否存在具有动态甚至弱类型的编译*编程语言?

我想知道是否有一种编程语言可以编译为机器码/二进制(不是字节码,然后由 VM 执行,在考虑打字时这是完全不同的东西),具有动态和/或弱类型,例如:

考虑一种编译语言,其中:

  • 变量不需要声明
  • 可以在运行时创建变量
  • 函数可以返回不同类型的值

问题:

  • 有这样的编程语言吗?
  • (为什么不?

我认为动态但强类型的编译语言真的很有意义,但有可能吗?

0 投票
2 回答
1164 浏览

c# - .NET 4.0 中的新“动态”变量类型是否解决了 CLR 中的单/多方法分派问题?

对于使用 Java 和 C# 等静态类型语言进行编码的人来说,单次分派问题最为熟悉。基本思想是:

而运行时多态性允许我们根据 的类型(运行时类型)调度到正确的方法调用receiver,例如:

方法调用会根据 的运行时类型进行mything,即Cat. 这是单一的分派能力(存在于 Java/C# 中)。

现在,如果您不仅需要在接收器的运行时类型上进行分派,而且还需要在(多个)参数的类型上进行分派,那么您将面临一个小问题:

第二种方法永远不会被调用,因为在我们的“消费者”代码中,我们只是倾向于通过它们共同的超类型或接口来处理不同类型的对象(在我的示例中是访问者)。

这就是我问的原因——因为动态类型允许多重分派多态性,而 C# 4.0 具有动态关键字;)

0 投票
2 回答
1078 浏览

java - 运行时类型解析的 Java 最佳实践

我正在尝试定义一个类(或一组实现相同接口的类),它将表现为松散类型的对象(如 JavaScript)。它们可以保存任何类型的数据,对它们的操作取决于底层类型。

我让它以三种不同的方式工作,但似乎都不理想。这些测试版本只允许字符串和整数,唯一的操作是加法。添加整数导致整数值的总和,添加字符串将字符串连接起来,将整数添加到字符串会将整数转换为字符串并将其与字符串连接。最终版本将拥有更多类型(Doubles、Arrays、可以动态添加新属性的类 JavaScript 对象)和更多操作。

方式一:

...和 ​​DynString1 类似

方式二:public interface DynObject2 { @Override public String toString(); 公共 DynObject2 添加(DynObject2 d);}

...和 ​​DynString2 类似

方式3:

使用 if-else 逻辑,我可以使用 value.getClass()==Integer.class 而不是存储类型,但是对于更多类型,我会更改它以使用 switch 语句,并且 Java 不允许 switch 使用类。

无论如何......我的问题是做这样的事情的最好方法是什么?