如何在Scala中传递名称重复参数?
以下代码无法工作:
scala> def foo(s: (=> String)*) = {
<console>:1: error: no by-name parameter type allowed here
def foo(s: (=> String)*) = {
^
Run Code Online (Sandbox Code Playgroud)
有没有其他方法可以将可变数量的名称参数传递给方法?
functional-programming scala variadic-functions lazy-evaluation
如何使用需要存在的抽象方法定义特征,即使它可以具有不同的参数.我只想确保扩展特征的类具有方法和相同的返回类型.下面的示例(主要是说明性的)重载"添加"并给出需要定义"添加"的错误.我该如何更改Trait中的方法声明?
不幸的是,所有答案都不起作用.我不确定我是否清楚,但我不希望定义/检查的参数中有任何已定义的类型(任何,泛型,类型定义),因为它的类型和参数的数量可以改变,在我的返回的情况可能相同.我只是想要检查是否存在具有相同名称和返回的方法而忽略参数."任何"都不是替代品,因为它不是类型安全的,我想清楚地定义函数作为参数的期望.
例:
trait X{
def add: Boolean
}
class Y extends X {
def add(i: Int, s: String) : Boolean = {...}
}
class W extends X {
def add(i: Int, y: Int, w: Set[String]) : Boolean = {...}
}
Run Code Online (Sandbox Code Playgroud) 方法参数String*和Array[String]?之间有区别吗?
安慰:
scala> def main(args: Array[String]): Unit = {}
main: (args: Array[String])Unit
scala> def main(args: String*): Unit = {}
main: (args: String*)Unit
Run Code Online (Sandbox Code Playgroud)
代码1:
object Example {
def main(args: Array[String]): Unit = {
println("Hello")
}
}
>> Hello
Run Code Online (Sandbox Code Playgroud)
代码2:
object Example {
def main(args: String*): Unit = {
println("Hello")
}
}
>> Exception in thread "main" java.lang.NoSuchMethodException: Example.main([Ljava.lang.String;)
at java.lang.Class.getMethod(Class.java:1786)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:126)
Run Code Online (Sandbox Code Playgroud)