Javaのクロージャをいじってみた(6)

(※updated 2008-08-11のBGGAクロージャライブラリ使用)
1.return の記述
いまさら気づいたんだけど、returnのないクロージャの場合、
最後のステートメントは ; つける必要があるみたいね。
逆にこれがついていない場合はreturnがあるものとみなされるみたい。


// ○ 成功する
{String str => System.out.println("Hello " + str); }

// × コンパイルでエラーになる
// [cannot use a void expression as a closure result]というエラー
{String str => System.out.println("Hello " + str) }


2.戻り値無しのクロージャ型記述
あとクロージャの型はvoid型戻り値の場合、明示的にvoidを記述する必要が
あるっぽい。引数は空でいいのに。

...昔のblog記事見直すと{String=>}とか書いているので、
BGGAクロージャライブラリのバージョンによって違うのかも。


// ○ 成功する
{String=>void} print;

// × コンパイルでエラーになる
// [required a type; found a lambda]というエラー
{String=>} print;

// これはOK
{=>String} print;


戻り値として渡したいステートメントは、最後尾で ; が
ついていないことが目印なのかも。(想像)

{=>} とかいう型の書き方はなくなっちゃうのね。void型ぐらい無記名でも
いいと思うんだけどなあ。 {=>void} ってリフレクションやJNIで利用する
シグネチャの書式 ()V っぽいな。
 
 
 

コメント

このブログの人気の投稿

java7のロードマップ

リフレクション無しにjar間のクラスを解決する作りこみ

Arrays.asList()のジェネリクスの仕組み