2
在下面的代碼,你可以看到一些艱鉅的重複輸入:方法的局部類型別名
implicit def intEqualInstance
[ root,
path <: TypePath[root] ]
(implicit mappingResolver: rel.rules.MappingResolver[path])
= {
new genExp.Compiler
[ genExp.templates.Where.Comparison[root, path, genExp.templates.Operator.Equal, typeLevel.Bool],
genExp.values.Where.Comparison[ genExp.values.Expression.Value[ Int ] ],
relExp.templates.Where,
List[rel.Value] ]
{
override def compileTemplate(tpl: genExp.templates.Where.Comparison[root, path, genExp.templates.Operator.Equal, typeLevel.Bool]) = {
...
}
override def processValues(vals: genExp.values.Where.Comparison[ genExp.values.Expression.Value[ Int ] ]) = {
...
}
}
}
我想聲明類型別名爲反覆類型。
我已經嘗試添加亞型約束在下面,但它使隱含的分辨率失敗:
implicit def intEqualInstance
[ ...,
inputTemplate <: genExp.templates.Where.Comparison[root, path, genExp.templates.Operator.Equal, typeLevel.Bool],
inputValues <: genExp.values.Where.Comparison[ genExp.values.Expression.Value[ Int ] ] ]
(implicit mappingResolver: rel.rules.MappingResolver[path])
= {
new genExp.Compiler
[ inputTemplate,
inputValues,
... ]
{
override def compileTemplate(tpl: inputTemplate) = ...
override def processValues(vals: inputValues) = ...
}
...
添加本地類型的別名,使得隱式解析,失敗過:
implicit def intEqualInstance
...
= {
type InputTemplate = genExp.templates.Where.Comparison[root, path, genExp.templates.Operator.Equal, typeLevel.Bool]
type InputValues = genExp.values.Where.Comparison[ genExp.values.Expression.Value[ Int ] ]
new genExp.Compiler
[ InputTemplate
InputValues,
... ]
...
有沒有解決方案?
你可以在某些對象定義別名(爲了限制其範圍),然後導入方法中此對象的別名: 'def foo {import AliasesHolder._ ...}' –
@ om-nom-nom我不這麼認爲,因爲在本地聲明在函數體中的別名不起作用,有什麼區別。 –
是的,誤解了這個問題 –