Scalaはクールです。しかし、時には、私が期待しているようにうまくいかないものばかりでなく、一見自発的な制限のために非常にイライラすることもあります。Scalaの複数の独立したimplicits
この場合、Scalaで引数解析ライブラリを作成しました。
def option[T](
name1: String, name2: String = null, name3: String = null,
name4: String = null, name5: String = null, name6: String = null,
name7: String = null, name8: String = null, name9: String = null,
default: T = null.asInstanceOf[T],
metavar: String = null,
choices: Seq[T] = null,
aliases: Map[T, Iterable[T]] = null,
help: String = "")
(implicit convert: (String, String, ArgParser) => T, m: Manifest[T]) = {
optionSeq[T](nonNullVals(name1, name2, name3, name4, name5, name6,
name7, name8, name9),
metavar = metavar, default = default, choices = choices,
aliases = aliases, help = help)(convert, m)
}
は基本的に、これは与えられたタイプの通常のオプション引数を宣言しています。それは、この機能を持っています。型に適切な既定のコンバータで塗りつぶされる暗黙の関数があります。暗黙的なマニフェストもあります。なぜなら、私は、特定のことについてそれを条件付けできる必要があるからです。
これは実際にデフォルト以外のコンバータを提供しようとするまで機能しました。書かれているように、あなたはコンバータを供給するだけではなく、マニフェストを供給する必要があります。私はそれを行う方法がわかりません。とにかくひどく醜いのです。マニフェストは、 JVM内の壊れた部分であり、エンドユーザーに公開されるべきではありません。
Scalaでは、暗黙の引数と暗黙的でない引数を1つの引数リストに混在させることはできません.IMOは任意かつ不必要な制限ですが、そうであってもかまいません。だから私は暗黙的な引数リストを2つの別々の引数リストに分割しようとしました。不運 - Scalaは、複数の暗黙的な引数リスト(別の見かけ上の任意の制限)を持たないようにも思えます。
私はこれを回避する方法を考えていません。提案?
今後のScalaバージョンでは、これらの制限の一部を修正する現行の試みはありますか(および/または、IMOが突然醜悪であるマニフェストよりも型消滅の脆弱性を回避する目に見えない方法を考え出しています。 )?
ありがとう、私はそれを試してみましょう。 Scalaの非機能を回避しようとしているので、やっかいです。 'option [Int](" ngram "、" n-gram "、default = 3、help =" "something" "")という名前の引数を加えて、1つ以上の名前を宣言できるようにしたい。 ) '。 –