これはうまくいきますが、私はタグタイプが何であるべきかわからないので、コンパイラの助けを避けたいと思います。フィールドタイプのことを知っています。私は理想的に持っていると思い何Scala - パラメータタイプがありません - コンパイラの支援を避けることは可能でしょうか?
val x: TypeString = TypeString("test")
TypeValidator.validate[TypeString](x, x => {
true
})
がある:(Xタイプが推測されている)
TypeValidator.validate(x, x => {
true
})
についてはこちらに周りに検索た
import models.implementations.Field
object TypeValidator {
def apply(): TypeValidator = {
new TypeValidator()
}
def validate[T <: Field](t: T, v: T => Boolean): Boolean = {
new TypeValidator().validate(t, v)
}
}
class TypeValidator {
def validate[T <: Field](t: T, v: T => Boolean): Boolean = v.apply(t)
}
を次のようにバリデーションクラスがあります私はこれを避けることができないかもしれないとの結論に達しましたが、私は誰かが解決策を持っていることを願っています。
おそらく、私は答えを見つけに来て最も近いがここにいた:
scala anonymous function missing parameter type error
更新は - ちょうど追加する、これは作業を行いますが、私はまだ良い解決策があるかもしれません感じます。
TypeValidator.validate(x)(x => {
true
})
クラスを匿名関数のパラメータの2番目のセットに変更しました。
class TypeValidator {
def validate[T <: Field](t: T)(v: T => Boolean): Boolean = v.apply(t)
}
:
さらに、あなたは、関数の引数の周りに括弧を省略すべきことができますか? –
2番目のソリューションから中括弧を削除し、かっこで置き換えることができます。より少ない入力と私の意見で*ソリューションです。カレー化は、推論のタイプを助けるために行うのが一般的なことです。例えば、リスト上の 'foldLeft'はこれを使います。 –
@MichaelZajac、これは何よりもハックを感じます。このソリューションは機能しますが、あまりにも複雑すぎます。 –