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 Я так не думаю, так как локально псевдонимы, объявленные в теле функции, не сработали, и в чем разница. –
Да, неправильно поняли проблему –