问题标签 [typechecking]

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 回答
378 浏览

java - 在Java中做'is'的最简单方法是什么?

许多语言都可以检查对象是否属于某种类型(包括父子类),使用“is”实现并像这样使用:

或者稍微繁琐一点,您可以在其他语言中使用“as”关键字进行软类型转换并查看结果是否为空。

我已经有好几年没用过 Java 了,现在我正在恢复使用它的速度,但是 Java 肯定有一种方法可以轻松地做到这一点,而无需深入研究反射 API?

提前感谢您的回答。我已经在这里和其他地方进行了搜索,但是所涉及的关键字非常通用,即使我确定这有一个简单的答案,谷歌搜索也很困难。

0 投票
9 回答
16873 浏览

c - 在 C 中强制执行强类型检查(typedefs 的类型严格性)

有没有办法对相同类型的 typedef 强制执行显式转换?我必须处理 utf8,有时我对字符数和字节数的索引感到困惑。所以最好有一些 typedef:

此外,您需要在它们之间进行显式转换:

我知道 C 中不存在这样的功能,但也许您知道这样做的技巧或编译器扩展(首选 gcc)。


编辑 我仍然不太喜欢匈牙利符号。由于项目编码约定,我无法将它用于这个问题,但我现在在另一个类似的情况下使用它,其中类型也相同并且含义非常相似。我不得不承认:它有帮助。我永远不会去声明每个整数都以“i”开头,但就像 Joel 的重叠类型示例一样,它可以挽救生命。

0 投票
10 回答
372956 浏览

python - 检查 Python 变量类型的最佳(惯用)方法是什么?

我需要知道 Python 中的变量是字符串还是字典。下面的代码有什么问题吗?

更新isinstance:我接受了 avisser 的回答(尽管如果有人解释为什么优先于 ,我会改变主意type(x) is)。

但感谢裸狂热者提醒我,使用 dict(作为案例陈述)通常比使用 if/elif/else 系列更干净。

让我详细说明我的用例。如果一个变量是一个字符串,我需要把它放在一个列表中。如果它是一个字典,我需要一个唯一值列表。这是我想出的:

如果isinstance是首选,您将如何编写此value_list()函数?

0 投票
7 回答
3774 浏览

php - 强制 PHP 在未声明的变量上出错?在对象中?

如果我拼错变量名,有什么方法可以强制 PHP 崩溃(错误,无论如何)?如果我使用一个类的实例并且我拼错了一个变量的名称怎么办?

[我知道我应该习惯它,但也许有一种方法可以强制执行名称检查?]

谢谢!

编辑:对不起,这不是很具体。这是代码,我想得到两个错误。现在我只得到一个(最后一行)。

0 投票
6 回答
275 浏览

javascript - 告诉我的库函数的用户传递的变量不是正确类型的最佳方法是什么

我目前正在创建一个 javascript 函数库。主要供我自己使用,但您永远无法确定其他人是否最终在他们的项目中使用它,我至少正在创建它,就好像这可能发生一样。
大多数方法仅在传递的变量具有正确的数据类型时才有效。现在我的问题是:提醒用户变量类型不正确的最佳方法是什么?应该抛出这样的错误吗?

我知道 javascript 会进行内部类型转换,但这会产生非常奇怪的结果(即 '234' + 5 = '2345' 但 '234' * 1 = 234),这可能会使我的方法做非常奇怪的事情。

编辑
为了让事情更加清楚:我不希望进行类型转换,传递的变量应该是正确的类型。告诉我的库用户传递的变量类型不正确的最佳方法是什么?

0 投票
1 回答
108 浏览

exception - 动态语言中参数类型检查的正确位置在哪里?

考虑以下。(在伪代码中)。

  1. 最佳实践是在构造函数中执行参数类型/有效性检查,然后在函数中再次执行,还是仅在两种方法之一中执行。(即构造函数 xor 方法)。

  2. 此外,所述方法的范围(公共/受保护/私有/等)是否改变了上述答案(1)。例如 isASafe(world) 是一个公共的静态方法,并且只在类中封装逻辑。

  3. 构造函数是否应该进行任何检查?

我对此事有自己的个人看法,但想看看其他人的想法,以及他们认为最有效/最有效的方法。

0 投票
7 回答
11713 浏览

python - 我应该检查构造函数参数的类型(以及其他地方)吗?

Python 不鼓励检查类型。但在许多情况下,这可能很有用:

  1. 检查构造函数参数。例如检查 foe Boolean、string、dict 等。如果我不这样做并将对象的成员设置为参数,它将在以后引起问题。

  2. 检查函数参数。

  3. 在属性中。如果有人设置了错误的值或不同的类型,我应该迅速做出反应。

0 投票
5 回答
100003 浏览

python - 参数类型检查 Python

有时检查 Python 中的参数是必要的。例如,我有一个函数接受网络中其他节点的地址作为原始字符串地址或封装其他节点信息的类节点。

我使用 type() 函数,如下所示:

这是一个好方法吗?

更新 1: Python 3 有函数参数的注释。这些可用于使用工具进行类型检查:http: //mypy-lang.org/

0 投票
3 回答
4884 浏览

c# - 如何检测一个对象是一个泛型集合,以及它包含哪些类型?

我有一个字符串序列化实用程序,它接受(几乎)任何类型的变量并将其转换为字符串。因此,例如,根据我的约定,整数值 123 将被序列化为“i:3:123”(i=整数;3=字符串长度;123=值)。

该实用程序处理所有原始类型以及一些非泛型集合,例如 ArrayLists 和 Hashtables。接口形式为

public static string StringSerialize(object o) {}

在内部我检测对象是什么类型并相应地序列化它。

现在我想升级我的实用程序来处理通用集合。有趣的是,我找不到合适的函数来检测该对象是一个通用集合,以及它包含什么类型——我需要哪些信息才能正确序列化它。迄今为止,我一直在使用表单的编码

if (o is int) {// do something}

但这似乎不适用于泛型。

你有什么建议吗?


编辑:感谢Lucero,我已经更接近答案了,但我在这里遇到了这个小语法难题:

此代码无法编译,因为lt不允许将“”作为对象的<T>参数List<>。为什么不?什么是正确的语法?

0 投票
5 回答
2601 浏览

c++ - 检查多态性中的实变量类型(C++)

假设我们有一个类 A 和类 B 和 C 继承自它。然后我们创建一个对 A 的引用数组,并用 B 和 C 填充它。现在我们决定要消除所有的 C。有没有一种方法可以检查数组的每个字段真正拥有的类型,而无需执行诸如 returnType() 函数之类的冗余操作?

编辑:将“A 的数组”固定为“A 的引用数组”。