[前][次][番号順一覧][スレッド一覧][生データ]

langsmith:81

From: Shugo Maeda <shugo ruby-lang.org>
Date: Wed, 14 Jul 2004 01:52:07 +0900
Subject: [langsmith:81] 強い型の言語とクロージャ

前田です。

MAEDA Atusi wrote:
> ところで、Javaには一見closureにとても良く似た記法があります。
> 無名クラスを使って、
>     class MyClass {
>        void method1(final int x) {
> 	 ActionListener a = new ActionListener() {
> 	  public void actionPerformed(ActionEvent e) {
> 	    ... xへの参照 ...
> 	  };
> 	 ...
>        }
>     }
> みたいに書けたりしますが、ここでactionPerformedの中でxを変更することは
> 出来ません。(actionPerformedの中で参照するmethod1の変数は、finalでない
> とコンパイル時にエラーになってしまいます。)

あまり関係ないのですが、強い型の言語にクロージャを導入した場合、型の扱い
はどうするのが望ましいでしょう。

たとえば、C#に将来追加されるクロージャ(匿名メソッド)の場合、あらかじめ、

  public delegate bool Foo(int i, string s);

のようにクロージャの型(delegate)を定義しておいて、

  public void Bar(Foo foo)
  {
      ...
  }

  public void Baz()
  {
      Bar(new Foo(i, s) {
          ...
      });
  }

のように使うようです。
(http://www.microsoft.com/japan/msdn/vs/vcsharp/vbconCProgrammingLanguageFutureFeatures.asp#vbconcprogramminglanguagefuturefeaturesanchor4)

あらかじめ型を定義させる代りに、

  // C#風の上手い文法が思いつきませんでしたが、boolが戻り値の型です
  public void Bar(Closure<bool, int, string> foo)
  {
      ...
  }

  public void Baz()
  {
      Bar(new Closure<bool, int, string>(i, s) {
          ...
      });
  }

のように、シグニチャが一致したら型適合する、というような行き方もあるのか
なと思ったのですが、C#のような名前による型適合の言語だと、前者の方が自然
でしょうか。

ちなみにSatherのクロージャは匿名にはできない(RubyのObject#methodみたいな
ものです)のですが、型適合に関しては後者のスタイルですね。

-- 
前田 修吾

--
ML: langsmith quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]

        76 2004-07-13 12:42 [mogami brain.riken.g] 変更可能なclosure変数、対、static変数   
        77 2004-07-13 13:42 ┣[nobsun sampou.org   ]                                       
        78 2004-07-13 15:07 ┣[maeda-langsmith atus]                                       
        80 2004-07-13 19:58 ┃┣[mogami brain.riken.g] Re: 変更可能なclosure変数、対、sta  
->      81 2004-07-14 01:52 ┃┗[shugo ruby-lang.org ] 強い型の言語とクロージャ            
        84 2004-07-14 15:02 ┃ ┣[takuo aya.or.jp     ]                                   
        86 2004-07-14 23:32 ┃ ┃┗[shugo ruby-lang.org ]                                 
        85 2004-07-14 20:52 ┃ ┗[randy mvd.biglobe.ne]                                   
        87 2004-07-14 23:59 ┃  ┗[shugo ruby-lang.org ]                                 
        88 2004-07-15 00:04 ┃   ┣[shugo ruby-lang.org ]                               
        89 2004-07-15 01:50 ┃   ┗[nobsun sampou.org   ]                               
        90 2004-07-15 11:04 ┃    ┗[shugo ruby-lang.org ]                             
        79 2004-07-13 14:43 ┗[matz ruby-lang.org  ]