これは単なる疑問。
Button クラスに action という変数(APIリファレンスとしては変数、という呼び方が正しいと思うが属性、でもよいような)があるのだが、これにはfunction (): Voidが必要なんだな。
だからまぁ、こう書く。
以下、さくらばさん、bluepapa32さんからいただいたコメントにより加筆。
ありがとうございます!
結局、この例ではこうするのが一番良い。
Button クラスに action という変数(APIリファレンスとしては変数、という呼び方が正しいと思うが属性、でもよいような)があるのだが、これにはfunction (): Voidが必要なんだな。
だからまぁ、こう書く。
var b = Button {
layoutX: 10.0
layoutY: 10.0
text: "ボタン"
action: function () {
// 処理記述
}
}これでも良いんだけど、こう書きたくなってしまう。var b = Button {
layoutX: 10.0
layoutY: 10.0
text: "ボタン"
action: buttonAction()
}
function buttonAction () {
//処理記述
}これがダメなんですよー。actionはfunction()でないとだめ。だからVoid返すfunctionじゃダメで、こう書くことで回避できる。var b = Button {
layoutX: 10.0
layoutY: 10.0
text: "ボタン"
action: buttonAction()
}
function buttonAction (): function(): Void {
function () {
//処理記述
}
}なんじゃこりゃと。2行にfunctionが3つも出てきてホントやめて欲しいのでこうする。var b = Button {
layoutX: 10.0
layoutY: 10.0
text: "ボタン"
action: function(){
buttonAction()
}
}
function buttonAction (): Void {
//処理記述
}何がなにやら。以下、さくらばさん、bluepapa32さんからいただいたコメントにより加筆。
ありがとうございます!
結局、この例ではこうするのが一番良い。
var b = Button {
layoutX: 10.0
layoutY: 10.0
text: "ボタン"
action: buttonAction // <- 括弧無し
}
function buttonAction (): Void {
//処理記述
}関数を変数として扱うことが出来る反面、
括弧を付けてしまうと関数の結果だけが代入されてしまう。
action属性はfunction(): Voidという関数型の変数を割り当てる必要があるため、
こういう結果になるというわけ。
そうすると、引数付きの関数を呼びたい場合は
やはり一枚かませる必要がありそう。
さくらばさん (Java in the Box annex)
bluepapa32さんのブログ
括弧を付けてしまうと関数の結果だけが代入されてしまう。
action属性はfunction(): Voidという関数型の変数を割り当てる必要があるため、
こういう結果になるというわけ。
そうすると、引数付きの関数を呼びたい場合は
やはり一枚かませる必要がありそう。
さくらばさん (Java in the Box annex)
bluepapa32さんのブログ
2 件のコメント:
これは単純なことで、カッコが多いんです。
だから、2番目の書き方では
action: buttonAction
と書きます。
buttonActionの後にカッコを書いてしまうと、関数コールが発生してしまうためうまくいかないのです。カッコを書かなければ、関数型の変数とみなされるので OK です。
ありがとうございます!
加筆しましたー。
コメントを投稿