Questions tagged «typechecking»

类型检查器强制给定编程语言中的表达式键入正确,即符合特定类型系统的规则。


11
您如何找出对象的类型(在Swift中)?
当试图理解一个程序时,或者在某些极端情况下,能够真正找出某种类型的东西很有用。我知道调试器可以向您显示一些类型信息,并且通常可以依靠类型推断来避免在那种情况下不指定类型,但是,我仍然很想拥有类似Python的东西type() dynamicType(请参阅此问题) 更新:在Swift的最新版本中对此进行了更改,obj.dynamicType现在为您提供了对类型的引用,而不是动态类型的实例。 这似乎是最有前途的,但到目前为止我还无法找出实际的类型 class MyClass { var count = 0 } let mc = MyClass() # update: this now evaluates as true mc.dynamicType === MyClass.self 我还尝试使用类引用实例化一个确实有效的新对象,但奇怪地给我一个错误,说我必须添加一个required初始化程序: 作品: class MyClass { var count = 0 required init() { } } let myClass2 = MyClass.self let mc2 = MyClass2() 尽管实际上只是发现任何给定对象类型的一小步 编辑:我已经删除了大量现在不相关的详细信息-如果您有兴趣,请查看编辑历史记录:)

3
TypeScript中的类类型检查
在ActionScript中,可以在运行时使用is运算符检查类型: var mySprite:Sprite = new Sprite(); trace(mySprite is Sprite); // true trace(mySprite is DisplayObject);// true trace(mySprite is IEventDispatcher); // true 是否可以使用TypeScript检测变量(扩展或)是否为某个类或接口? 我在语言规范中找不到任何有关它的信息。使用类/接口时,它应该在那里。

3
* args和** kwargs的类型注释
我正在尝试使用具有抽象基类的Python类型注释来编写一些接口。有没有一种方法来注释可能的类型*args和**kwargs? 例如,如何表达一个函数的明智参数是一个int或两个int?type(args)给出,Tuple所以我的猜测是将类型注释为Union[Tuple[int, int], Tuple[int]],但这是行不通的。 from typing import Union, Tuple def foo(*args: Union[Tuple[int, int], Tuple[int]]): try: i, j = args return i + j except ValueError: assert len(args) == 1 i = args[0] return i # ok print(foo((1,))) print(foo((1, 2))) # mypy does not like this print(foo(1)) print(foo(1, 2)) 来自mypy的错误消息: t.py: …

8
Java:Instanceof和泛型
在查看通用数据结构中的值索引之前,我想看看它是否甚至this已被参数化为该类型的实例。 但是当我这样做时,Eclipse会抱怨: @Override public int indexOf(Object arg0) { if (!(arg0 instanceof E)) { return -1; } 这是错误消息: 无法针对类型参数E执行instanceof检查。请改用其擦除对象,因为泛型类型信息将在运行时删除 有什么更好的方法呢?


9
如何检查Ruby对象是否为布尔值
我似乎无法轻松地检查对象是否为布尔值。Ruby中有类似的东西吗? true.is_a?(Boolean) false.is_a?(Boolean) 现在,我正在执行此操作,并希望将其缩短: some_var = rand(1) == 1 ? true : false (some_var.is_a?(TrueClass) || some_var.is_a?(FalseClass))
121 ruby  typechecking 

1
为什么“约束技巧”在此手动定义的HasField实例中不起作用?
我有使用镜头和GHC.Records的此代码(很奇怪): {-# LANGUAGE DataKinds, PolyKinds, FlexibleInstances, UndecidableInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} module Main where import Control.Lens import GHC.Records data Glass r = Glass -- just a dumb proxy class Glassy r where the :: Glass r instance …

2
总和类型-为什么在Haskell中show(Int | Double)与`(show Int)|不同?(显示双)`
为什么这些不相等? show $ if someCondition then someInt else some double 和 if someCondition then show someInt else show someDouble 我了解,如果您将if ... else第一个示例中的部分本身与一个表达式隔离开,那么您就无法用匿名和类型来表示其类型Int | Double,就像您可以在TypeScript中轻松进行的操作(提及TypeScript,因为它是我经常使用的语言,该语言支持Sum类型),因此必须诉诸使用Either数据,然后再基于调用show。 我在这里给出的示例很简单,但对我来说,认为“好吧,我们将要显示某些东西,而某些东西取决于someCondition”,而不是“好吧,如果someCondition为true,则显示someInt,否则显示someDouble”,并且也允许减少代码重复(此处的显示重复了两次,但它也可能是一个长函数的应用程序,而不是if ... else可能要考虑的> 2个分支) 在我看来,对于编译器而言,检查构成求和类型的每种类型(在此处Int | Double)是否可以用作show函数的参数并确定类型是否正确应该很容易。更好的是,无论参数的类型如何,show函数总是会返回string,因此编译器不必随身携带所有可能的“分支”(因此所有可能的类型)。 是否选择不存在这样的功能?还是我认为实施起来更加困难?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.