我有一个问题,以下代码中名为 fooSome 的两个方法无法编译,因为编译器报告了重复方法名称的问题:
class Foo() {
// variable block has 2 closure variables
def fooSome(block: Some[(Int, String) => Unit]) = {
}
// variable block has 1 closure variables
def fooSome(block: Some[Int => Unit]) = {
}
// variable block has 2 closure variables
def fooNoSome(block: (Int, String) => Unit) = {
}
// variable block has 1 closure variables
def fooNoSome(block: Int => Unit) = {
}
}
相反,编译器报告没有与名为 fooNoSome 的两个方法发生此类方法名称冲突。所以问题是编译器没有看到“Some[(Int,String)=> Unit]”和“Some[(Int)=> Unit]”之间的区别,而“(Int,String)=> Unit”对于 fooNoSome 方法,被视为与 "( Int ) => Unit" 不同的签名。
我可以通过创建一个用于“Some[(Int, String) => Unit]”案例的类 Some2Args 和一个用于“Some[(Int) => Unit]”案例的类 Some1Arg 来解决这个问题。
我的问题是是否有更优雅、更省力的解决方案。