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]
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]