问题标签 [type-inference]

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 投票
86 回答
141658 浏览

c# - C#中var关键字的使用

在与同事讨论了 C# 3 中“var”关键字的使用后,我想知道人们对通过 var 正确使用类型推断有何看法?

例如,我在有问题的情况下相当懒惰地使用 var ,例如:-

更合法的 var 用法如下:-

有趣的是,LINQ 似乎有点灰色地带,例如:-

很清楚会产生什么结果,因为它将是一个实现 IEnumerable 的类型,但是它并不像声明新对象的 var 那样完全明显。

当涉及到对象的 LINQ 时,情况更糟,例如:-

这并不比等价的 foreach(var item in someList) { // ... } 等价。

这里有一个关于类型安全的真正担忧——例如,如果我们将该查询的结果放入一个接受 IEnumerable<int> 和 IEnumerable<double> 的重载方法中,调用者可能会无意中传入错误的类型。

var 确实保持强类型,但问题是类型在定义时不立即显现是否很危险,当重载时会放大的东西意味着当您无意中将错误的类型传递给方法时可能不会发出编译器错误。

0 投票
2 回答
1152 浏览

haskell - Fundeps 和 GADT:什么时候可以确定类型检查?

我正在阅读一篇关于 Haskell 以及 HList 是如何实现的研究论文,并想知道所描述的技术何时可以确定,何时不能确定类型检查器。此外,因为您可以使用 GADT 做类似的事情,所以我想知道 GADT 类型检查是否总是可确定的。

如果你有引用,我会更喜欢引用,这样我就可以阅读/理解解释。

谢谢!

0 投票
1 回答
368 浏览

testing - 使 Test.QuickCheck.Batch 使用默认类型来测试列表函数

我正在测试一个名为提取的函数,它可以在任何列表上运行。

我想测试它,例如,

但这不会编译;我必须为runor提供一个类型prop_len,因为 QuickCheck 不能生成[a],它必须生成一些具体的东西。所以我选择了Int

有没有办法让 QuickChecka为我选择而不是在类型中指定它run

0 投票
3 回答
385 浏览

compiler-construction - 如何推断强制?

我想知道如何在类型推断期间推断强制(又名隐式转换)。我正在使用 Bastiaan Heeren 在Top Quality Type Error Messages中描述的类型推断方案,但我认为在所有 Hindley-Milner-esque 方法中的总体思路可能都是相同的。

似乎强制可以被视为一种重载形式,但本文中描述的重载方法没有考虑(至少不是以我可以遵循的方式)基于上下文对返回类型的要求的重载,即胁迫的必要条件。我还担心这种方法可能难以优先考虑身份强制,也难以尊重强制的传递闭包。我可以看到将每个可强制表达式(例如e )添加到 coerce( e ),但是将其添加到 coerce(coerce(coerce(... coerce( e) ...))) 对于等于强制嵌套的最大嵌套的某些深度似乎很愚蠢,并且还将强制关系限制为具有有限传递闭包的东西,其深度与上下文无关,这似乎(不必要?)限制。

0 投票
2 回答
700 浏览

c# - 继承期间的表达式推断

我有以下代码:

我收到此编译器错误消息:

如果我将对 FigureItOut 的调用更改为:

然后它工作。有没有办法通过更改基类来编译第一个示例?

我知道如果我将整个 Base 类设为通用,如下所示:

然后它可以工作,但我宁愿不这样做,任何其他可以使用的黑客,也许在方法级别(即以某种方式更改 FigureItOut)。

0 投票
2 回答
1614 浏览

c# - C# 3.0 Func/OrderBy 类型推断

我今天在 OrderBy 遇到的奇怪情况:

然后:

这很好,但我打算创建一个方法,因为它可能在 orderBy 以外的其他地方可用。

现在,当我尝试将其插入 OrderBy 时:

如果我使用 Func,它就不能像它那样推断类型。在我看来,它们应该是相同的,因为方法本身就像 Func 一样是“强类型”的。

旁注:我意识到我可以做到这一点:

0 投票
4 回答
218034 浏览

java - Collections.emptyList() 返回一个列表?

I'm having some trouble navigating Java's rule for inferring generic type parameters. Consider the following class, which has an optional list parameter:

import java.util.Collections

I'm having some trouble navigating Java's rule for inferring generic type parameters. Consider the following class, which has an optional list parameter:

My Java compiler gives the following error:

But Collections.emptyList() returns type <T> List<T>, not List<Object>. Adding a cast doesn't help

yields

Using EMPTY_LIST instead of emptyList()

yields

Whereas the following change makes the error go away:

Can anyone explain what type-checking rule I'm running up against here, and the best way to work around it? In this example, the final code example is satisfactory, but with larger classes, I'd like to be able to write methods following this "optional parameter" pattern without duplicating code.

For extra credit: when is it appropriate to use EMPTY_LIST as opposed to emptyList()?


You want to use:

If you look at the source for what emptyList does you see that it actually just does a

0 投票
1 回答
895 浏览

lambda - 统一问题的类型推断

有谁知道类型推断问题如何

与打字环境

可以在统一问题中转移吗?

任何帮助将不胜感激!

0 投票
2 回答
167 浏览

parsing - 是否有众所周知的算法来推断解析器规则的“返回类型”?

给定一个语法和附加的动作代码,是否有任何标准解决方案来推断每个产生式需要产生什么类型(因此,调用产生式应该期望从中得到什么类型)?

我正在考虑使用类似于 c#var语法的 OO 程序和操作代码(但我不是在寻找特定于 c# 的东西)。

如果不是函数重载和递归语法,这将是相当简单的。

像这样的情况会出现问题:

0 投票
5 回答
9716 浏览

c# - C# 3.0 泛型类型推断 - 将委托作为函数参数传递

我想知道为什么当 C# 3.0 编译器可以隐式地为同一方法创建委托时,当它作为参数传递给泛型函数时,它无法推断方法的类型。

这是一个例子:

我原以为我可以传递foobar并让编译器从传递的函数的签名中推断出类型,Action<T>但这不起作用。但是,我可以在不强制转换的情况下创建一个Action<int>from foo,所以编译器不能通过类型推断来做同样的事情是否有正当理由?