セレクターネームスペース草案

  • メンバの定義は 識別子@名前空間オブジェクトを返す式: method{} というように書く。
  • 名前空間オブジェクトは namespace関数 で生成する。
  • 呼び出すときは インスタンス.識別子@名前空間オブジェクトを返す式() というように書く。
  • use文を使うことで呼び出す際の指定を省略できる。
  • use文は use 名前空間オブジェクトを返す式; という書式で、宣言されたスコープ中だけで有効となる。
  • use文を使った場合、名前空間を指定していないメソッドは一番最後に検索される。
  • use文を複数使った結果、二つ以上の該当する名前空間指定されたメソッドが発見された場合、例外が投げられる。
NS: namespace();
NS2: namespace();
Foo: class{
  bar: method(n){
    return n;
  }

  bar@NS: method(n){
    return n*2;
  }

  bar@NS2: method(n){
    return n*3;
  }
}

foo: Foo();

foo.bar(10).p; //=> 10
foo.bar@NS(10).p; //=> 20
foo.bar@NS2(10).p; //=> 30

{
  use NS;
  foo.bar(10); //=> 20
}

{
  use NS;
  use NS2;
  foo.bar(10); //=> ERROR!
}

ご意見募集!