错误:表达式'无(int)'属于'选项[system.int]'并且必须被丢弃

时间:2018-03-31 11:18:38

标签: templates nim

import options

template p[T] = none(T)

discard p[int]
  

templat.nim(5,1​​0)错误:表达式'无(int)'是类型的   '选项[system.int]'并且必须被丢弃

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

编辑:我已经尝试了新的东西,而且可能是另一种非常无用的编译器消息。

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

这构建。主要更改可能是untyped返回类型(请注意,typed也没有工作,使用相同的奇怪消息)。
最后一个问题,T.none很好但不是none(T)。我认为UFCS都应该是等价的。

1 个答案:

答案 0 :(得分:3)

默认情况下,Nim会假设模板返回一个“语句列表”(Nim代码块,不代表任何值)。由于这必须是格式良好的块,因此必须正确处理或丢弃其中所有调用的返回值,因此您会看到错误。

要解决此问题,只需向模板添加返回值:

  import options

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

  discard p[int]