微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在编译时访问变量

如何解决在编译时访问变量

will trait 允许编译时访问调用它的 Variable。是否有其他方法可以访问将安装在给定词法范围内的 Variable? (我知道我可以在运行时访问 Scalar,但我正在尝试访问 Variable

特别是,我希望能够执行以下操作(不起作用):

multi trait_mod:<is>(Sub \fn,:$foo) {
    for fn.lexical_variables { #`(do stuff) }
}

有什么办法吗?

解决方法

目前还没有,但是在未来的 Raku 语言版本中应该是可能的。正在努力为 Raku 语言(目前称为“RakuAST”)定义标准 AST,并重写编译器前端以使其工作。一旦完成,它将在许多地方公开。宏是最明显的消费者,但它也是有计划的:

  • 使块或例程的 AST 可从特征中获得,以便特征可以检查甚至修改 AST
  • 引入自定义编译器通道,这些模块将被授予访问它们导入范围的整个 AST 的权限

第一个似乎满足您的用例。继续当前提议的 API,它可能看起来像这样:

private func xpcUpperCase(input: String) {
  connection.resume()
  defer { connection.suspend() }
  guard let xpcService = connection.remoteObjectProxy as? MyAppXPCServiceProtocol else {
    throw NSError()
  }

  xpcService.upperCaseString(input) { output in
    print(output)
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。