问题标签 [static-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 投票
1 回答
849 浏览

testing - Scala 的静态测试

在 Scala 中有一些很好的测试库(SpecsScalaTestScalaCheck)。然而,使用 Scala 强大的类型系统,在 Scala 中开发的 API 的重要部分是静态表达的,通常以编译器阻止的一些不受欢迎或不允许的行为的形式。

那么,在设计库或其他 API 时,测试编译器是否阻止了某些事情的最佳方法是什么?注释掉应该是不可编译的代码然后取消注释以进行验证是不令人满意的。

一个人为的示例测试列表:

现有的测试库之一是否处理这样的案例?有没有一种人们使用的方法有效?

我正在考虑的方法是将代码嵌入三引号字符串或 xml 元素中,并在我的测试中调用编译器。调用代码看起来像这样:

或者,类似于在解释器上调用的expect类型脚本。

0 投票
4 回答
2144 浏览

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

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

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

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

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

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

0 投票
5 回答
18892 浏览

scala - Scala 中类型归属的目的是什么?

规范中没有太多关于类型归属的信息,当然也没有关于它的目的的任何信息。除了“使传递可变参数起作用”之外,我会使用类型归属来做什么?下面是一些 scala REPL 的语法和使用它的效果。

0 投票
3 回答
14429 浏览

scala - 是否可以在 Scala 中指定匿名函数的返回类型?

我知道您可以创建一个匿名函数,并让编译器推断其返回类型:

仅仅为了静态类型,是否也可以指定它的返回类型?我认为这会让事情变得更清楚。

0 投票
2 回答
403 浏览

hash - Boo:显式指定哈希的类型

我是 Boo 的新手,并试图弄清楚如何声明哈希的类型。当我做:

编译器抱怨“方法不是对象的成员”。我收集它不知道哈希中的值是什么类型。

有什么方法可以向编译器声明哈希的键和值是什么类型,这样它就不会抱怨?

0 投票
5 回答
43804 浏览

java - Java 强制转换会引入开销吗?为什么?

当我们将一种类型的对象转换为另一种类型时是否有任何开销?或者编译器只是解决所有问题并且在运行时没有成本?

这是一般的事情,还是有不同的情况?

例如,假设我们有一个 Object[] 数组,其中每个元素可能有不同的类型。但是我们总是可以肯定地知道,比如说,元素 0 是一个 Double,元素 1 是一个字符串。(我知道这是一个错误的设计,但我们假设我必须这样做。)

Java 的类型信息在运行时是否仍然保留?或者编译后一切都被遗忘了,如果我们做 (Double)elements[0],我们只会跟随指针并将这 8 个字节解释为双精度,不管那是什么?

我非常不清楚Java中的类型是如何完成的。如果您对书籍或文章有任何建议,那么也谢谢您。

0 投票
5 回答
7165 浏览

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

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

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

0 投票
10 回答
78302 浏览

terminology - 静态/动态与强/弱

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

0 投票
9 回答
11160 浏览

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

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

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

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

问题:

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

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

0 投票
4 回答
16997 浏览

language-agnostic - 是否有任何静态类型的、可嵌入的脚本语言?

我想知道是否有任何静态类型的可嵌入脚本语言。Python、JavaScript 等是很棒的语言,但它们是动态类型的(即在运行时检查类型)。我只是想知道是否有人知道可以嵌入到 C++ 应用程序中的任何静态类型的脚本语言?