问题标签 [implicit-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.
c# - C#混淆隐式类型变量与动态
如果你运行 TestClass.Test() 你会得到一个 RuntimeBinderException。这一切都始于var str = DoSomething(obj);
隐式键入动态而不是字符串。有人可以解释这里发生了什么吗?为什么RequiresString(str);
有效?我知道你不能在动态对象上调用扩展方法,但这整件事对我来说有点肮脏和破碎。尽管存在明显的类型不匹配,但一切编译良好,然后在运行时失败。
typescript - 打字稿隐式类型(不是任何隐式)
在我从事的 Typescript 项目中,我无法再访问,我记得似乎能够执行以下操作:
作为 Typescript 的新手,它似乎相当于写这个:
基本上,在我看来,如果我在函数中以本机类型命名变量,它似乎隐含地被键入为该类型,而不是any
.
不过当时我对 Typescript 还是很陌生,所以完全有可能真的发生了其他事情,我只是误解了这种情况。
现在我正在尝试建立自己的打字稿项目,我想对其进行配置以再次允许该功能。我不知道该怎么做,或者我所想的是否是一个真正的 Typescript 功能。
这是 Typescript 中的真正功能吗?
如果是,我该如何配置 Typescript 来做到这一点?
idris - 为什么在函数位置时未绑定的隐式无效?
在Idris ch 3的类型驱动开发中,Brady 说
Idris 不会将每个未定义的名称视为未绑定的隐式名称 - 仅以小写字母开头并且单独出现或出现在函数参数中的名称。鉴于以下情况,
test: f m a -> b -> a
...
f
不被视为未绑定的隐式,这意味着必须在其他地方定义它才能使此类型有效。
为什么 Idris 不能f
像推断其他变量的类型一样推断?
scala - 隐式转换作为参数有什么意义?
我正在阅读有关 Scala 中的implicits 的文档,并且有一个以隐式转换作为参数的函数示例:
我了解它是如何工作的,但我不明白这样写它的意义何在:
据我所知,如果存在从参数seq
到类型的转换Seq[T]
,编译器仍然允许调用getIndexExplicit
?
为了说明我的观点,我准备了这个简单的例子:
事实上,这两个函数似乎都以相同的方式工作:
如果没有区别,那么显式定义隐式转换有什么意义?
我的猜测是,在这种简单的情况下,它没有任何区别,但它必须有一些更复杂的场景。那些是什么?
swift - 将内联显式类型注释添加到具有返回值但在 Swift 中没有输入参数的闭包?
通常一个函数不需要显式类型,因为它可以从上下文推断类型:
通常,您需要提供显式类型注释以强制它使用特定类型,或者在编译器无法推断类型的情况下。当您有输入参数时,这很简单:
但是,如果您没有输入参数,我不确定语法应该是什么样子:
错误:预期的表达式
我尝试了所有这些变化都无济于事:
let f = { -> Double in
:“错误:预期的表达”let f = { _ -> Double in
:“错误:无法在当前上下文中推断闭包参数'_'的类型”,这也将其更改为接受一个参数,这不是我想要的。let f = { Void -> Double in
:“错误:无法在当前上下文中推断闭包参数'Void'的类型”let f = { Never -> Double in
:“错误:无法在当前上下文中推断闭包参数‘从不’的类型”
我可以通过在末尾添加一个as
子句来使其工作,但是如果无法使用这种语法为闭包定义一个显式的返回类型,这似乎很冗长并且像是一种疏忽。
as
如果没有输入参数,如何为闭包定义显式返回类型(使用内联语法而不是)?
注意:如果已经存在另一个问题,我很乐意将其作为重复项关闭。(我尝试使用这些术语搜索重复项explicit type annotation closure return only
,但找不到任何相关内容。)
c# - 为什么隐式类型的本地人总是可以为空的?
考虑以下代码,它是在启用了可空引用的上下文中编写的:
s
被隐式键入为 astring?
而不是 a string
。
这是设计使然,正如MSDN 的 var 官方文档中提到的那样:
当 var 与启用的可空引用类型一起使用时,它始终暗示可空引用类型,即使表达式类型不可为空。
但这是为什么呢?是因为变量可能会在以后重新分配吗?
此外,即使它是键入的,因为string?
我可以在没有警告的情况下取消引用它:
但是,如果我创建另一个确实返回 astring?
的方法,如果我尝试取消引用,编译器现在会发出警告,即使两个变量都键入为string?
:
答案基本上是“编译器在后台跟踪空状态”,并且隐式类型的变量类型有点被忽略吗?
我觉得这很奇怪,因为在这两种情况下,s
都键入为string?
,但只有在后一个示例中,如果我在没有检查的情况下取消引用,编译器才会发出警告。需要明确的是,这是我最终所期望的,但正是我们到达那里的方式让我感到困惑。
typescript - 类型推断方法返回
如何将data
属性隐式传递给new MockBuilder
in .withArrayObject('data', 6, () => new MockBuilder()
?
我不想在嵌套中分配类型new MockBuilder
typescript - 如何允许作为类键的字符串
我有以下功能:
应该是 T 中的property
键(作为字符串?),不应接受其他值。我试过了,property: [key in t]
但这不起作用。有没有办法做到这一点?