Java Closures: first prototype を見て1
http://gafter.blogspot.com/2007/10/java-closures-first-prototype.html
なんか出てたんでとりあえず実験。JDK6.0以上必須だそうです。
Neal Gafterのページで「download an executable version of the prototype here」から closures.ztarをダウンロード。
適当な場所に解凍する。
テストをコンパイル&実行してみる。
% cd closures-2007-11-04 % ./bin/javac test/tools/javac/closures/Clarkson2.java % ./bin/java Clarkson2 print % ./bin/java Clarkson2 % ./bin/java Clarkson2 % ./bin/java Clarkson2 print print
Clarkson2.javaの中身はこんな感じ。
public class Clarkson2 { public static void main(String[] args) { wihle.invoke({=>Math.random()<0.5},{=>System.out.println("print");}); } interface BThunk extends {=>boolean} { } static final {BThunk,{=>void}=>void} wihle={BThunk cond, {=>void} action => while (cond.invoke()) action.invoke();}; } /* Exception in thread "main" java.lang.ClassCastException: Main$1 cannot be cast to Main$BThunk */
かなりキモい文法だけど読めんこともないな。
wihleの型
次の2つを引数にとる関数で、戻り値はない。
- 第1引数はBThunk型
- BThunk はbooleanを返す関数。引数はとらない。
- 第2引数は 「「引数を受けとらず void を返す関数」を受けとって voidを返す関数」 という型
wihleの実体
- 第1引数にBThunkを受けとって、
- 第2引数に 「void を返す関数」を受けとって、それを第1引数の条件を見たすまで実行するというもの。