Scala 如果方法没有参数/没有副作用,则删除括号
我读到,如果一个方法不带参数并且没有副作用,可以删除括号以提高可读性(斯巴达实现)。所以我可以调用下面的代码Scala 如果方法没有参数/没有副作用,则删除括号,scala,Scala,我读到,如果一个方法不带参数并且没有副作用,可以删除括号以提高可读性(斯巴达实现)。所以我可以调用下面的代码 def withoutP = { println(s"without p") } withoutP 然后我找到了这段代码,它接受参数,但我仍然可以在没有括号的情况下调用它。怎么做 def isEven(n: Int) = (n % 2) == 0 List(1, 2, 3, 4) filter isEven foreach println 我试着运行这段代码,
def withoutP = {
println(s"without p")
}
withoutP
然后我找到了这段代码,它接受参数,但我仍然可以在没有括号的情况下调用它。怎么做
def isEven(n: Int) = (n % 2) == 0
List(1, 2, 3, 4) filter isEven foreach println
我试着运行这段代码,但没有成功。为什么?
def withP(i:Int) = {
println("with p")
}
withP 1
';' expected but integer literal found.
[error] withP 1
[error] ^
[error] one error found
在你的例子中
def isEven(n: Int) = (n % 2) == 0
List(1, 2, 3, 4) filter isEven foreach println
您实际上没有调用isEven
。您可以调用filter
,这是列表上的一个方法,而isEven
是filter
的参数filter
使用值作为参数,为列表中的每个值调用isEven
filter
写在中,这对于只接受一个参数的方法是合法的。另一种选择是
List(1, 2, 3, 4).filter(isEven)
在这种情况下,
也是必需的,因为过滤器
是列表
类中的一个方法。在您的示例中
def isEven(n: Int) = (n % 2) == 0
List(1, 2, 3, 4) filter isEven foreach println
您实际上没有调用isEven
。您可以调用filter
,这是列表上的一个方法,而isEven
是filter
的参数filter
使用值作为参数,为列表中的每个值调用isEven
filter
写在中,这对于只接受一个参数的方法是合法的。另一种选择是
List(1, 2, 3, 4).filter(isEven)
在这种情况下,
也是必需的,因为过滤器
是列表
类中的一个方法。1。例如,第一个例子,不带参数调用,这是通过Scala编译的,允许省略
2.第二个例子是,使用参数调用而不输出1
,这是由于需要以对象开始而导致的。因此,可以通过以下方式实现圆括号:
this withP 1 //infix notation with this (current object)
因此,对于1
和2
而言,省略括号规则并不相同。第一个是arity-0
规则,第二个应该使用中缀符号来省略括号。1。对于第一个示例,调用而不使用参数,这是通过Scala编译的,允许在
2.第二个例子是,使用参数调用而不输出1
,这是由于需要以对象开始而导致的。因此,可以通过以下方式实现圆括号:
this withP 1 //infix notation with this (current object)
因此,对于1
和2
而言,省略括号规则并不相同。第一个是arity-0
规则,第二个应该使用中缀符号来省略括号。这是我的疑问。如果filter
接受一个参数(isEven
),我怎么能写filter-isEven
而不加括号,即filter(isEven)
,这是我的疑问。如果filter
接受一个参数(isEven
),我怎么能写filter-isEven
而不带括号,即filter(isEven)
的可能重复