Я постоянно нахожу, что нужно написать функцию с внутренней рекурсивной функции помощника, и он принимает один и тот же список параметров в качестве внешней функции, а лишь дополнительный аккумулятор аргумент:ограничить неявное разрешение Параметр области
def encode(tree : Tree, text: String):String = {
def rec(tree: Tree, text:String, result:String):String = ???
rec(tree, text, "")
}
Я хочу упростить это в:
def encode(tree : Tree, text: String)(implicit result:String = ""):String
это может удалить внутреннее определение функции, но у него есть проблема, что посмотреть, если мне нужно вызвать функцию lookup
внутри encode
и lookup
также принимает неявный параметр типа String, implicit result:String = ""
неявно переходит к функции lookup
.
def lookup(tree : Tree, text: String)(implicit result:String = ""):String
Я не хочу, чтобы это произошло, есть способ ограничить неявный параметр в lookup
от решения вне этой функции? Или другие лучшие идеи?
Моя интуиция подсказывает мне, что это не хорошее использование неявных списков параметров ... К сожалению, я не могу объяснить или оправдывать интуицию. –
@ RandallSchulz Martin использовал этот шаблон в PIS 2nd P494. Пример 'maxListImpParm', в основном это означает, что у метода есть дополнительная информация, которую я хочу передать, здесь информация является аккумулятором. Проблема здесь, не в этом шаблоне, это происходит везде, где у вас есть неявные параметры, это просто передается неявно, иногда это противоречит моему намерению, если «lookup» не определен мной, я, возможно, не знал, этот параметр когда-либо проходил к нему. – Sawyer