问题标签 [type-safety]
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中的类Haskell类型系统
我想知道,是否有可能将 haskell 强大的类型系统集成到像 C 这样的语言中,并且仍然能够进行有效的低级编程?
c# - 使用类型安全的集合类有什么好处?
我想知道,为什么在某些情况下我看到一个代表某种类型集合的类。
例如:
在 Microsoft XNA 框架中:TextureCollection、TouchCollection 等。还有 .NET 框架本身中的其他类,以 Collection 结尾。
为什么要这样设计?这样做有什么好处而不是作为泛型类型集合,就像在 C# 2.0 中引入的那样?
谢谢
c++ - Scala 严格类型系统 vs C++ 类型系统
对于Scala的严格类型系统的粉丝,但C++的粉丝:
- 是否可以强迫自己以同样严格的方式编写 C++程序?(不使用
void*
,不铸造很多,装箱简单值类型即struct Month {int value;};
)。 - 还是默认情况下 C++ 比Scala 更严格(如果你不努力使用强制转换)?尽管 C++ 模板的“鸭子类型”——如果它不合适,它仍然不会让你编译,对吧?
- C++0x (wrt to C++03) 是否为愿意接受完全类型安全编程的人添加了一些东西?
scala - 使用类型对任意约束建模以进行编译时检查
鉴于 Scala 的强大类型系统,我有一个雄心勃勃的项目,现在我将要放弃它,因为努力与有用的比率似乎太高了。
基本上我有一些图形元素 ( ),它们对应于以给定计算速率GE
执行的声音过程。图形元素由形成其输入的其他图形元素组成。现在对输入的速率有相当随意的限制。在源语言(SuperCollider)中,速率是在运行时检查的,这自然是因为它是一种动态类型的语言。我想看看我是否可以在编译时强制执行检查。
一些约束相当简单,可以用“arg1 的速率必须至少与 arg2 的速率一样高”的形式表示。但其他人变得复杂,例如
“如果 arg0 的汇率是‘需求’,则 args1 的汇率必须是‘需求’或‘标量’或等于封闭 GE 的汇率”。
问题是:我应该放弃吗?以下是运行时检查的外观:
相比之下,它与费率的类型参数相比如何:
测试:
一条值得追求的路?除了代码膨胀之外,还有三件事反对它:
- 可能有几十个
GE
s 需要自定义约束 - 编写
GE
s 变得越来越困难:代码可能需要传递几十个类型参数 - 转换可能会变得困难,例如想象一个
List[GE[_<:Rate]].map( ??? )
. 我的意思是如何Duty.RateCons
翻译成TDuty.RateCons
(TDuty
不同的地方GE
)......
我已经在这个项目上投入了相当多的时间,这就是为什么我不愿意这么轻易放弃的原因。所以...说服我我正在做一些有用的事情,或者告诉我我应该回到动态检查的版本。
java - Java:使用反射正确检查类实例化
我正在尝试使用一种最简单的反射形式来创建类的实例:
对我们得到的未知 Class 对象进行类型转换会Class.forName
产生警告:
我试过使用instanceof
检查方法:
但这会产生编译错误:
Cannot perform instanceof check against parameterized type Class<? extends My>. Use the form Class<?> instead since further generic type information will be erased at runtime.
所以我想我不能使用instanceof
方法。
我该如何摆脱它,我应该如何正确地做到这一点?是否可以在没有这些警告的情况下使用反射(即不忽略或抑制它们)?
c# - 与 C# 相比,VB.NET 是弱类型的吗
昨天我在一次面试中,我的面试官(诚然并没有声称自己是该主题的专家)说“VB.NET 的类型比 C# 更弱” - (同时他不记得一个例子)。
这个陈述对我来说似乎是不正确的(特别是考虑到两种语言都使用相同的框架库来表示它们的类型),我建议他这样做,也许他对打开/关闭 Option Strict 或 Option Infer 的选项感到困惑。
同时我知道 VB.NET 在某些情况下会进行类型强制 - 偶尔会导致意外结果(虽然我也记不起在什么条件下) - (实际上我想我只记得主要是在执行算术运算时使用不同的类型 - 而其他语言会迫使你明确(?))。
那么有人可以澄清一下VB.NET的类型比C#更弱吗?如果是这样,你能提供例子吗?
c++ - 使用枚举进行类型检查——如何正确确定范围
我混合了 C++ 类,其中一些将状态变量 0..9 存储为整数,其他使用“0”...“9”。目前我做:
这使我可以编写错误代码isOne<StoresValueAsInt::value>()
。相反,我想让编译器抱怨这种不正确的用法。我尝试了以下方法:
但是,这不起作用,因为 kOne 在命名空间级别是可见的,因此它具有冲突的 kOne 声明。
有没有办法不在命名空间中声明枚举?或者这里有更好的方法?
更新: 添加了我目前所做的;希望能澄清我的用例。
java - 使用编译器技巧防止方法调用
我大致有这些类型:
我想<R>
在调用时有一个额外的限制onDuplicateKeyUpdate()
。<R>
这样做的原因是,这种方法只有在绑定到 的任何子类型时才有意义,UpdatableRecord
而不仅仅是Record
. 例子:
有没有什么技巧或方法可以用来为类的泛型类型添加一个额外的限制,只是为了一个方法声明?
注意:
- 声明
Insert<R extends UpdatableRecord>
不是一种选择,因为我希望拥有Insert<R extends Record>
不可更新的记录的灵活性 - 推导
UpdatableInsert<R extends UpdatableRecord> extends Insert<R>
该方法并将其向下推可能是一种选择,但我真的不想引入一种新类型。我有几个这样的方法有几个不同的限制,这会导致类型爆炸。 - 投掷
UnsupportedOperationException
是相当明显的,但它似乎是 Java 1.4 的做法。我真的想知道我是否可以使用泛型和编译器来解决这个问题。
理想的解决方案:
java - 类型擦除和集合
我在实现参数化类参数时遇到了一个特定问题,但这是我以前用泛型遇到过的问题,所以一个通用的解决方案会很好..
类参数存储严格数量的类之一的值:
这一切都很好,直到我尝试将 Parameter 实例存储在集合中。例如:
在这种情况下,其他人会做什么来解决这个问题?
谢谢
java - 如何创建一个集合,其中只能添加一个不允许添加子类或超类的类型?
我想要一个仅包含一种数据类型并且不允许将其任何超类或子类添加到 Set 的 Set。