使用类型参数时Scala中的重载

使用类型参数时Scala中的重载,scala,types,overloading,Scala,Types,Overloading,请看我目前正在编写的这段代码(它旨在解析main方法参数中的一些参数): 我还打算编写一个重载方法来处理字符串的情况: def parser(identifier: String, default: String): String = parser[String](identifier, default, identity) 编译器似乎对此不感兴趣,不允许我重载该方法。我必须更改其中一种方法的名称,以使其正常工作: def parser(identifier: String, default:

请看我目前正在编写的这段代码(它旨在解析main方法参数中的一些参数):

我还打算编写一个重载方法来处理字符串的情况:

def parser(identifier: String, default: String): String = parser[String](identifier, default, identity)
编译器似乎对此不感兴趣,不允许我重载该方法。我必须更改其中一种方法的名称,以使其正常工作:

def parser(identifier: String, default: String): String = genParser[String](identifier, default, identity)

在使用类型参数时,有什么原因不能重载吗?

编译器不关心重载

<console>:8: error: method parser: (identifier: String, default: String) String does not take type parameters.
调用此方法:

def parser(identifier: String, default: String): String
而不是你想要的这个:

def parser[T](identifier: String, default: T, modifier: String => T): T
这幅图很好地编译了:

val args = Array[String]()

def parser[T](identifier: String, default: T, modifier: String => T): T = {
  val l = args.filter(_.startsWith(identifier))
  if(l.isEmpty) default
  else modifier(l(0).drop(identifier.length).trim)
}

def parser(identifier: String, default: String): String = "dummy"

编译器并不关心重载

<console>:8: error: method parser: (identifier: String, default: String) String does not take type parameters.
调用此方法:

def parser(identifier: String, default: String): String
而不是你想要的这个:

def parser[T](identifier: String, default: T, modifier: String => T): T
这幅图很好地编译了:

val args = Array[String]()

def parser[T](identifier: String, default: T, modifier: String => T): T = {
  val l = args.filter(_.startsWith(identifier))
  if(l.isEmpty) default
  else modifier(l(0).drop(identifier.length).trim)
}

def parser(identifier: String, default: String): String = "dummy"

谢谢你澄清这一点。你知道我在定义方法时如何指定使用哪个“解析器”吗?不知道。考虑一个稍微不同的设计,在这里,您将有一个<代码> >变压器>代码> >类型>字符串= >字符串 >而不是<代码>修饰符< /代码>,类型<代码> String=t。知道您需要一个函数
String=>String
,您可以提供标识函数的默认值,如
s=>s
),而不是重载整个方法。您可以在下一步中修改结果。谢谢您的澄清。你知道我在定义方法时如何指定使用哪个“解析器”吗?不知道。考虑一个稍微不同的设计,在这里,您将有一个<代码> >变压器>代码> >类型>字符串= >字符串 >而不是<代码>修饰符< /代码>,类型<代码> String=t。知道您需要一个函数
String=>String
,您可以提供标识函数的默认值,如
s=>s
),而不是重载整个方法。您可以在下一步中修改结果。