【问题标题】:`Error: request to generate code for .compileTime proc``错误:请求为 .compileTime proc 生成代码`
【发布时间】:2022-08-12 05:29:59
【问题描述】:

我有一个小助手程序,它应该在编译时告诉我一个类型是否是对象类型。

func isObject*[T](val: typedesc[T]): bool {.compileTime.} = T is (object or ref object)  

但是,当我使用简单的 echo 调用此 proc 以查看它是否有效时,我收到一个错误:

type A = object
echo isObject(A)
Error: request to generate code for .compileTime proc: isObject

这是为什么?调用它应该是完全有效的,isObject 应该只编译为true,最后写的是echo true,为什么会导致这个神秘的错误?

    标签: compile-time nim-lang


    【解决方案1】:

    这里的问题是运行时代码echo 电话)正在尝试使用编译时过程.

    这是无效的,因为编译器会不是用其结果替换函数调用,但尝试在运行时实际调用函数。编译器知道这是无效行为,因此通过抛出错误来禁止它,尽管它不是有用。

    允许这样做的唯一方法是将编译时过程的结果存储在编译时变量中,即const。这些允许在运行时使用。

    所以调用代码看起来更像这样:

    type A = object
    const x = isObject(A)
    echo x
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      • 2022-01-20
      • 2016-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-07
      相关资源
      最近更新 更多