スカラはかっこいい。しかし、一見恣意的に見える多くの制限や、期待どおりに機能しないことが原因で、非常にイライラすることもあります.
この場合、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 では、単一の引数リストに暗黙的な引数と非暗黙的な引数を混在させることができないことは既に知っています。IMO は恣意的で不必要な制限ですが、それでも構いません。そこで、暗黙の引数リストを 2 つの別個の引数リストに分割して、それぞれに 1 つの暗黙的な引数リストを作成してみました。運が悪かった -- Scala はまた、複数の暗黙の引数リストを持つことを妨げているようだ (これも恣意的な制限のように見える)。
これを回避する方法がわかりません。提案?
また、将来の Scala バージョンでこれらの制限のいくつかを暗黙的に修正する現在の試みはありますか?