Следующий код является еще одной попыткой создать класс с каналом. Здесь я передаю канал непосредственно со стороны вызывающей стороны, а не открываю его внутри класса. Несмотря на то, что код дает ожидаемый результат, я задаюсь вопросом, законно ли это делать, особенно вызывая openwriter()
непосредственно в операторе new
(как в случае baa
). Другими словами, можно ли считать, что файл остается открытым, пока существует переменная (здесь output
in Myclass
), которая ссылается на базовый файл, даже если фактическая переменная канала является временной?
class Myclass
{
var output: channel;
proc init( output = stdout )
{
this.output = output;
}
}
proc main()
{
var foo = new owned Myclass();
foo.output.writeln( 10 ); // written to stdout
var baa = new owned Myclass( openwriter("test.out") );
baa.output.writeln( 20 ); // written to file
baa.output.writeln( 30 );
}