我经常发现我需要写有内递归辅助函数功能,它采用相同的参数列表外的功能,但只有一个附加蓄能器的参数:限制隐含参数解析范围
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
的隐含参数?或者其他更好的想法?
我的直觉告诉我,这是不是一个很好的利用隐含参数列表......不幸的是,我无法解释或证明直觉。 – 2013-05-02 16:54:29
@RandallSchulz Martin在PIS 2nd P494中使用了这种模式。 'maxListImpParm'示例,基本上就是说,该方法有一些我想传递的附加信息,这里的信息是一个累加器。这里的问题不是这种模式,它发生在任何你有隐含参数的地方,它只是隐含地传递,有时这违背了我的意图,如果'lookup'没有被我定义,我可能不知道,参数曾经通过到它。 – Sawyer 2013-05-02 17:03:45