Avatar
そうすると、ジェネリクスにおいて「ある Foo 」を利用する人が「ある Foo 」に仮の名前(型パラメータ)を与えるのと同じように、 opaque result type についても「ある Foo 」を利用する人、つまり some Fooreturn する関数を利用する人が仮の名前を与えるような構文もあり得る気がします。そうすれば、字面上同じ some Foo 同士で代入できない↓のようなコードにならずに、それぞれの some Foo に利用者側が別の名前を割り当てて使うことができるかもしれません。 var a: some Foo = foo1() let b: some Foo = foo2() a = b // `some Foo` 同士の代入だけどコンパイルエラー (edited)
3:36 PM
たとえば↓のようなイメージ。 func foo1() -> some Foo { /* ... */ } func foo2() -> some Foo { /* ... */ } var a: Bar = foo1<Bar>() // `some Foo` に `Bar` の名前を付ける let b: Baz = foo2<Baz>() // `some Foo` に `Baz` の名前を付ける a = b // `Baz` を `Bar` に代入しようとしているのでコンパイルエラー ただし、 foo1 の戻り値同士は代入可能なので、 foo1 の呼び出し箇所間で同じ名前を与えるためにどういう構文が良いのかわかりません。 (edited)