file - “通道”类型的字段给出错误“无法默认初始化具有泛型类型的变量”
问题描述
在这段代码中,我正在创建一个包含一个通道的类,该通道可以在初始化时根据请求打开。为此,我传递了一个标志来指示通道是否已打开(连同其文件名)。
class Myclass
{
var writeflag : bool;
var output : channel;
proc init( writeflag = false, filename = "" )
{
this.writeflag = writeflag;
if writeflag { // (1)
assert( filename != "" );
this.output = openwriter( filename );
} // (2)
}
}
proc main()
{
var a = new owned Myclass( writeflag = true,
filename = "test.out" );
a.output.writeln( 123 );
}
但是,编译器拒绝上述代码并显示以下消息:
myclass.chpl:6:错误:无法默认初始化具有泛型类型 myclass.chpl:6 的变量:注意:“未完全实例化”具有泛型类型“通道”
另一方面,如果我注释掉 (1) 和 (2),代码会按预期工作并创建“test.out”。我猜这个问题与(根据错误消息)的通用性质有关channel
,但不太确定如何适当地编写这样的代码......
解决方案
我猜这个问题与通道的通用性有关(根据错误消息),但不太确定如何正确编写这样的代码......
你在正确的轨道上。通道记录有一些必须在编译时提供的参数字段。您可以在字段声明中指定这些参数:
var output : channel(writing=true, kind=iokind.dynamic, locking=false);
推荐阅读
- javascript - 获取下一个 6 个工作日问题,Javascript
- github-actions - Github 操作仅签出推/拉文件
- r - R和GIS:将sf对象内的多个GPS坐标列表转换为多边形
- angular - Angular subscribe method is calling multiple time
- java - 即使成功登录,用户也是匿名的
- matrix - 创建静态度量以获取 power bi dax 中的值
- django - 在 django 中重置密码后向用户发送电子邮件
- numpy - opencv,Python中的计算问题
- kubernetes - 用于跨所有节点调度 pod 的 POD 亲和性规则
- javascript - 无效语法的错误 1064 不断显示,我不知道为什么