В этом коде я создаю класс, содержащий канал, который может быть открыт по запросу при инициализации. Для этого я передаю флаг, указывающий, открыт канал или нет (вместе с его именем файла).
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
(согласно сообщению об ошибке), но не очень уверен, как правильно написать такой код ...