この前置きとして、これは決して大きな問題ではなく、プログラミング言語の設計に関してはあまり聞いたことがないことであり、興味深い解決策があるかどうか疑問に思っていました。
問題の核心はこれです。オブジェクト指向言語では、メソッドの1つを介してオブジェクトを変更できるようにしたいが、そのメソッドが返すものではなく、オブジェクト自体を返すことがあります。
Javaの例を挙げます。
class MyClass{
public MyClass(List<Integer> list){
//do constructor stuff
}
public MyClass(Integer i){
//what I would like to be able to do
this((new LinkedList<Integer>).add(i));
}
}
this()は最初の行でなければならないため、2番目のコンストラクターで一時リストを作成できません。明らかに、実装を変更してこれを行う方法はたくさんあります。たとえば、オブジェクトを返すadd()メソッドを作成したり、オブジェクトを作成する関数がリストを作成したりするなどです。
ただし、多くの場合、サブクラス(LinkedListの場合)を変更または作成することはできません。また、呼び出し元のコードを混乱させたくない場合は、スタイル内のオブジェクトを変更して返すことができます。 ++xのは本当に便利かもしれません。this(#(new LinkedList).add(i)
メソッドreturnではなく、反対したいことを示すようなもの
です。これを可能にする言語を知っている人は、簡潔な構文上の方法です。そうでない場合、これはまったく役に立ちますか、それともここで基本的な何かが欠けていますか?