Error: expression 'none(int)' is of type 'Option[system.int]' and has to be discarded

Error: expression 'none(int)' is of type 'Option[system.int]' and has to be discarded

import options

template p[T] = none(T)

discard p[int]

templat.nim(5, 10) Error: expression 'none(int)' is of type 'Option[system.int]' and has to be discarded

我认为在模板实例化之前写 discard 是一种足够合理的方式来完成编译器的要求,不是吗?现在就是脾气暴躁。

编辑:我尝试了新事物,这可能是另一个非常无用的编译器消息。

import options
template p[T](): untyped = T.none
discard p[int]()

这建立。主要变化可能是 untyped return 类型(请注意 typed 也不起作用,具有相同的奇怪消息)。
最后大吃一惊,T.none 很好,但 none(T) 不行。我认为从 UFCS 来看两者应该是等价的。

默认情况下,Nim 会假定模板 return 是一个 "statement list"(Nim 代码块,不表示任何值)。由于这必须是一个 well-formed 块,因此必须正确处理或丢弃其中所有调用的 return 值,因此您会看到错误。

要解决问题,只需在模板中添加一个return值:

  import options

  template p[T]: auto = none(T) # notice that I added "auto" here!

  discard p[int]