1

私のサンプルは次のように単純です。

def func(arg1: Long, arg2: Long, arg3: String) {
  privateFunc1(arg1);
  privateFunc2(arg1, arg2, arg3);
}

これはオーバーロードされた関数であり、これも機能します

def func(arg1: Long, arg2: Long, arg3: File) {
  privateFunc1(arg1);
  privateFunc2(arg1, arg2, arg3);
}

ご想像のとおり、privateFunc2 は既にオーバーロードされているため、両方の関数が機能します。

おそらく関数合成を使用して、scala のコードの冗長な繰り返しを避けることができますか? ベストプラクティスは何ですか?

ありがとう!

4

2 に答える 2

2

オーバーロードは物事を少し混乱させていると思います。同じ名前を再利用すると、コードが似ているように見えますがfunc、それぞれの場合で異なるメソッドを呼び出しているため、プライベート メソッドを別のものと呼ぶこともできます。

の2つのバージョンがprivateFunc2本当に似ている場合、変換/前処理を行うことができますかFileStringまたはその逆、または両方をコレクションに変換しますか? 次にprivateFunc2、 の 1 つのバージョンだけがあり、 のバージョンの 1 つがfunc変換を適用して別のバージョンに転送し、2 つのバージョンを持つことによる冗長性を排除しました。

適切に行いたいEither場合は、ラッパー型を使用する必要があるため、暗黙的な変換には近づきません (コードの他の場所で問題が発生する可能性があるため、一般的な型間の暗黙的な変換は強くお勧めしません)。それぞれの可能性に対処するために避けられない分岐を遅らせるだけでなく、ボイラープレートの束を導入するだけです。

tl;dr: 分割してprivateFunc2、入力タイプを 1 つしか取りません。または、そのままにしておいてください。

于 2013-07-02T15:13:09.913 に答える