问题标签 [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.
oop - 接口与基类
什么时候应该使用接口,什么时候应该使用基类?
如果我不想实际定义方法的基本实现,它是否应该始终是一个接口?
如果我有狗和猫课。为什么我要实现 IPet 而不是 PetBase?我可以理解为 ISheds 或 IBarks (IMakesNoise?)提供接口,因为这些接口可以逐个放置在宠物上,但我不明白哪个用于通用宠物。
class - 有没有静态鸭子类型的语言?
在考虑了这个问题一段时间后,我突然想到静态鸭子类型的语言可能真的有效。为什么预定义的类不能在编译时绑定到接口?例子:
你知道任何支持这种功能的语言吗?它对 Java 或 C# 有帮助吗?它在某些方面存在根本性缺陷吗?我知道你可以继承 MyClass 并实现接口或使用 Adapter 设计模式来完成同样的事情,但这些方法看起来像是不必要的样板代码。
prototyping - 谁能告诉我强类型和弱类型是什么意思,哪个更好?
谁能告诉我强类型和弱类型是什么意思,哪个更好?
.net - 将扩展方法应用于具有泛型类型的泛型类
我正在使用 vb.net 中的泛型类。
如果不指定类型,扩展方法似乎不能应用于泛型类。
我有这个通用类
还行吧
这不好(IDE 给了我未定义的错误 T。)
这与.Net的静态检查有关吗?
对我说“你可以尝试用 Type T 做的事情可能不兼容,我不会允许你这样做。”
PS 作为通用类,我所承受的所有这些痛苦都来自另一个库,并在许多不同的地方使用。我对在我继承的泛型类中继承和添加这个方法有点警惕。
.net - Script.Net vs Nemerle
我正在研究将脚本整合到我的应用程序中。然后我碰到了Script.Net和Nemerle。我知道它们有不同的语法,Nemerle 支持宏但不支持 Script.Net。但我想更多地了解它们在功能、用法和灵活性方面的差异。你会推荐哪一个,为什么?
谢谢。
抱歉,我没有注意到 Nemerle 本身就是一种语言。描述似乎是一种脚本语言。感谢和抱歉造成的混乱
functional-programming - 实现 Monad 的语言必须是静态类型的吗?
我正在学习函数式编程风格。在Don't Fear the Monads中,Brian Beckman 对 Monad 做了精彩的介绍。他提到 Monad 是关于函数的组合以解决复杂性。
Monad 包含
unit
将 T 型转换为放大型 M(T) 的功能;和一个 Bind 函数,给定从 T 到 M(U) 的函数,将类型 M(T) 转换为另一种类型 M(U)。(U可以是T,但不一定)。
据我了解,实现 monad 的语言应该进行静态类型检查。否则编译时找不到类型错误,“复杂度”不受控制。我的理解正确吗?
unit-testing - 自动化单元测试可以代替静态类型检查吗?
我已经开始研究整个单元测试/测试驱动的开发理念,我越想它似乎就越能扮演与静态类型检查类似的角色。这两种技术都为程序中的某些类型的错误提供了编译时、快速响应的检查。但是,如果我错了,请纠正我,但似乎具有完全覆盖的单元测试套件将测试静态类型检查将测试的所有内容,然后是一些。或者换一种说法,静态类型检查只是“证明”您的程序正确的部分方式,而单元测试将让您尽可能多地“证明”(在一定程度上)。
那么,如果您也使用单元测试,是否有任何理由使用具有静态类型检查的语言?此处提出了一个类似的问题,但我想更详细地介绍。静态类型检查相对于单元测试有哪些具体优势(如果有的话)?我想到了编译器优化和智能感知等一些问题,但是对于这些问题还有其他解决方案吗?还有其他我没有想到的优点/缺点吗?
python - 验证子类中的 Python 参数
我正在尝试验证一些 python 参数。在我们在 Python 3.0 中获得新的静态类型之前,最好的方法是什么。
这是我正在尝试的示例:
正如您所看到的,装饰器很好地对我的类的输入进行类型检查,但是我必须为第二个类定义所有参数,当我有多个继承级别时,这会变得非常讨厌。我可以使用 kwargs 取得一些成功,但它不如上面的类型检查方法那么好。
本质上,我想从 kwargs 列表中弹出一个参数并检查它的类型,然后将其余部分传递给它的父级,但是随着规模的扩大,以一种非常灵活和干净的方式执行此操作。
有什么建议么?
variables - 静态类型是否意味着如果要更改变量的类型就必须强制转换?
除了“强制转换”之外,还有其他方法可以在 Java 和 C++ 等静态类型语言中更改变量类型吗?
我试图弄清楚动态类型和静态类型在实际方面的主要区别是什么,并不断寻找非常学术的定义。我想知道就我的代码的外观而言这意味着什么。
compiler-construction - 静态类型的 Lua
我正在寻找在编译时进行类型检查的 Lua 前端编译器,但输出标准 Lua 5.1 字节码(只有运行时类型)。我想要的是相当数量的静态编译时语法分析和可选类型,以便比运行时更快地检测到微不足道的错误。生成的字节码必须与使用标准 LoadString() 编译的现有 Lua 字节码很好地配合使用。
需要明确的是——任何差异只会发生在字节编译时。在运行时,字节码不会知道在编译阶段发生了任何不同/不寻常的事情。
我的想法听起来很像 ActionScript;我什至不介意输出 Lua 字节码的 ActionScript 编译器!
有没有人听说过这样的努力?我已经看到一些关于使用 MetaLua 来执行此操作的参考资料,但老实说,我还不够聪明,无法对他们的文档做出正面评价