Scala - 使用默认参数减少重载

时间:2015-12-24 02:50:35

标签: scala overloading

我正在编写一个方法,该方法应该具有某些参数的默认值,但是重载似乎是一个不优雅的解决方案。该方法将Network作为第一个参数,NetworkNode作为第二个参数,将名称作为第三个参数,然后将这些参数传递给Network对象进行处理。但是,我希望Network和name参数都是可选的,并且如果没有定义,则使用默认值;这是我的第一次尝试:

  // FIXME: addNode overloading is not elegant
  def addNode(node: NetworkNode) = latestNetwork.addNode(node, "")
  def addNode(node: NetworkNode, name: String) = latestNetwork.addNode(node, name)
  def addNode(network: Network, node: NetworkNode) = network.addNode(node, "")
  def addNode(network: Network, node: NetworkNode, name: String) = network.addNode(node, name)

但这看起来并不太可读。我绝对希望将网络作为第一个参数,并且它是可选的非常可取。但是,以下内容不起作用:

def addNode(network: Network = latestNetwork, node: NetworkNode, name: String = "") = network.addNode(node, name)

有解决方法吗?在模块化解决方案的背景下,通常被认为是不好或不赞成的做法是否超载这样的默认值?

感谢您的时间。

1 个答案:

答案 0 :(得分:3)

您应该首先输入所需的参数,然后输出可选参数。这使您可以使用位置或命名参数轻松调用该函数。许多语言都需要可选参数。

如果您不想这样做,可以在呼叫站点命名参数:

def addNode(network: Network = latestNetwork, node: NetworkNode, name: String = "") = network.addNode(node, name)

addNode(node = myNode, name = "myNode")