ダーツとスモールトークはmethod cascadesです。メソッドカスケード構文
do with
で同様のスタイルが達成できるようです。
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;
};
私の質問:
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;
ここで方法カスケードと同様の効果をachiveするためにいくつかの場所でdo with
を使用して同等のプログラムです。たとえば
は、ここGTK::Simple
が使用する単純なプログラムですPerl 6でメソッドのカスケードスタイルを表現するための慣用的な方法がありますか?
do with
の欠点は、明示的に$_
を返す必要があることです。従来のメソッドカスケードでは、元のレシーバオブジェクトが暗黙的に返されます。
$button_a = do with GTK::Simple::Button.new(label => 'bcd')
{
.clicked.tap({ .sensitive = False; $button_b.sensitive = True });
$_
}
$_
がexplicly返却する必要はありませんでした場合、それはいいだろう:
例えば、ここで$button_a
が設定されている方法です。例えば、のようなもの:do with
へ
$button_a = do cascade GTK::Simple::Button.new(label => 'bcd')
{
.clicked.tap({ .sensitive = False; $button_b.sensitive = True });
}
別の欠点は、構文はダートとSmalltalkの方法カスケードの構文よりもヘビー級であるということです。
このサブルーチンで$button_a = GTK::Simple::Button.new(label => 'bcd')
..clicked.tap({ .sensitive = False; $button_b.sensitive = True });
ありがとう、ugexe!私は 'と'まだ使わなかった。 – dharmatech
@raiph私が今投稿した答えを見てください。これは 'カスケード'サブルーチンを定義するアプローチをとる。 – dharmatech