perl6 – 方法级联语法
发布时间:2020-12-15 21:43:40 所属栏目:大数据 来源:网络整理
导读:Dart和Smalltalk有 method cascades. 似乎可以通过这样做来实现类似的风格. 例如,这是一个使用 GTK::Simple 的简单程序: use v6;use GTK::Simple;my $app = GTK::Simple::App.new(title = "abc");$app.set-content( GTK::Simple::VBox.new( my $button_a =
Dart和Smalltalk有
method cascades.
似乎可以通过这样做来实现类似的风格. 例如,这是一个使用 use v6; use GTK::Simple; my $app = GTK::Simple::App.new(title => "abc"); $app.set-content( GTK::Simple::VBox.new( my $button_a = GTK::Simple::Button.new(label => 'bcd'),my $button_b = GTK::Simple::Button.new(label => 'cde') ) ); $app.border-width = 20; $button_a.clicked.tap({ .sensitive = False; $button_b.sensitive = True }); $button_b.sensitive = False; $button_b.clicked.tap({ $app.exit }); $app.run; 这是在一些地方使用do的等效程序来实现类似于方法级联的效果: use v6; use GTK::Simple; my $app; my $button_a; my $button_b; do with GTK::Simple::App.new(title => 'abc') { $app = $_; .set-content( GTK::Simple::VBox.new( $button_a = do with GTK::Simple::Button.new(label => 'bcd') { .clicked.tap({ .sensitive = False; $button_b.sensitive = True }); $_ },$button_b = do with GTK::Simple::Button.new(label => 'cde') { .sensitive = False; .clicked.tap({ $app.exit }); $_ } ) ); .border-width = 20; .run; }; 我的问题是,在Perl 6中表达方法级联风格是否有更惯用的方法? 一个缺点是你必须明确地返回$_.使用传统方法级联,隐式返回原始接收器对象. 例如,以下是$button_a的设置方式: $button_a = do with GTK::Simple::Button.new(label => 'bcd') { .clicked.tap({ .sensitive = False; $button_b.sensitive = True }); $_ } 如果$_不必被明确地返回,那将是很好的.例如,类似于: $button_a = do cascade GTK::Simple::Button.new(label => 'bcd') { .clicked.tap({ .sensitive = False; $button_b.sensitive = True }); } 另一个缺点是语法比Dart和Smalltalk方法级联语法更重要.更接近Dart风格的东西可能如下所示: $button_a = GTK::Simple::Button.new(label => 'bcd') ..clicked.tap({ .sensitive = False; $button_b.sensitive = True }); 解决方法
https://doc.perl6.org/routine/andthen
my $obj = IO::Path.new($*CWD) andthen do { .say; 42 }; say $obj.perl (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |