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)
的可能重复