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我不这么认为,因为在本地声明在函数体中的别名不起作用,有什么区别。 –
是的,误解了这个问题 –