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

langsmith:85

From: randy <randy mvd.biglobe.ne.jp>
Date: Wed, 14 Jul 2004 20:52:35 +0900
Subject: [langsmith:85] Re: 強い型の言語とクロージャ

randyです。

> あまり関係ないのですが、強い型の言語にクロージャを導入した場合、型の扱い
> はどうするのが望ましいでしょう。
>
> たとえば、C#に将来追加されるクロージャ(匿名メソッド)の場合、あらかじめ、
>
>   public delegate bool Foo(int i, string s);
>
> のようにクロージャの型(delegate)を定義しておいて、
>
>   public void Bar(Foo foo)
>   {
>       ...
>   }
>
>   public void Baz()
>   {
>       Bar(new Foo(i, s) {
>           ...
>       });
>   }
> あらかじめ型を定義させる代りに、
>
>   // C#風の上手い文法が思いつきませんでしたが、boolが戻り値の型です
>   public void Bar(Closure<bool, int, string> foo)
>   {
>       ...
>   }
>
>   public void Baz()
>   {
>       Bar(new Closure<bool, int, string>(i, s) {
>           ...
>       });
>   }
>
> のように、シグニチャが一致したら型適合する、というような行き方もあるのか
> なと思ったのですが、C#のような名前による型適合の言語だと、前者の方が自然
> でしょうか。

前者の記法と、後者の記法って対立する概念
なのでしょうか?
メソッドの型に名前をつけるかつけないかという
問題に思えるのですが。(「名前付きメソッド」と
「匿名メソッド」が別に対立する概念ではないのと
おなじように、「名前付き、メソッドの型」と
「匿名、メソッドの型」とがあってもいいような気が。)

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

がメソッドの型に名前をつける方法だとすると、

public void Bar(delegate bool(int, string) foo){
  ...
}

のように、匿名の「メソッドの型」も同時に存在していい気がします。
(delegateでなくてもいいんですが(closureとか)、前者の記法に
あわせてみました。)

この場合、この「匿名の「メソッドの型」」を持つメソッドを
いかに作成(new)するのかというのが問題なのだと思います。
以下の書き方ではどうでしょう。

public void Baz()
{
  Bar(new delegate bool(int i, string s){  // メソッドの型に名前を付けない方
法。
    ...
   });

  Bar(new Foo(i, s){  // こっちも同時に可能。
   });
}



randy
  randy mvd.biglobe.ne.jp
  randy users.sourceforge.jp



--
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  ]