Nim 支持类型推断吗?

Does Nim support type inference?

我在 Nim 中看到了这个例子,它需要 intbool 的显式类型规范,尽管有足够的信息来推断两者(就像 TypeScript 会做的那样)。

如果删除这些类型,它将无法编译,Nim 是否支持类型推断?

import sequtils

let list = @[1, 2, 4]
echo list.filter do (x: int) -> bool: x > 2

Does Nim support type inference?

根据 the Homepage,Nim 有一个……

Modern type system with local type inference, tuples, generics and sum types.

[粗体强调我的]

此外,the language manual 在大约 10 个不同的地方提到了类型推断。

并且 Comparison table on the Nim for TypeScript Programmers Wiki page 将类型推断列为一项功能。

所以,总的来说,答案是 "Yes",至少根据官方文档是这样。

来自手册:

The auto type can only be used for return types and parameters. For return types it causes the compiler to infer the type from the routine body:

http://nim-lang.github.io/Nim/manual.html#types-auto-type

你想要的是 sugar 模块中的 => 宏。

echo list.filter(x => x > 2)

来自文档:

匿名过程的语法糖。

macro `=>`(p, b: untyped): untyped
proc passTwoAndTwo(f: (int, int) -> int): int =
  f(2, 2)

passTwoAndTwo((x, y) => x + y) # 4

过程类型的语法糖。

macro `->`(p, b: untyped): untyped
proc pass2(f: (float, float) -> float): float =
  f(2, 2)

# is the same as:

proc pass2(f: proc (x, y: float): float): float =
  f(2, 2)