(1到10乘3)toList和(1到10乘3)toList在scala(或intellij问题)中的区别是什么

(1到10乘3)toList和(1到10乘3)toList在scala(或intellij问题)中的区别是什么,scala,intellij-idea,Scala,Intellij Idea,如果这个问题很愚蠢,请理解 我开始学习scala的基本语法 但我不明白为什么一个是错误,另一个不是。我用scala工作表对此进行了测试 val range = 1 to 10 by 3 toList println(s"$range") //error 但以下是列表(实际上如下所示) 我正在使用intellij 2018.2 ultimate edit 编辑:图像已更改。我附加了包含错误消息而非警告的捕获。 编辑:我认为这是intellij版本的问题,但仍然不起作用两者都应该起作用。在sca

如果这个问题很愚蠢,请理解

我开始学习scala的基本语法

但我不明白为什么一个是错误,另一个不是。我用scala工作表对此进行了测试

val range = 1 to 10 by 3 toList
println(s"$range") //error
但以下是列表(实际上如下所示)

我正在使用intellij 2018.2 ultimate edit

编辑:图像已更改。我附加了包含错误消息而非警告的捕获。


编辑:我认为这是intellij版本的问题,但仍然不起作用

两者都应该起作用。在scala中,可以省略
,并为方法调用留出空间,这可能是haskell way的一个坏版本。我认为根据官方文件,scala不建议使用空间-

例如:

scala> val data = "guitar"
data: String = guitar

scala> data.toUpperCase
res8: String = GUITAR
您可以使用空格代替

scala> data toUpperCase
<console>:13: warning: postfix operator toUpperCase should be enabled
by making the implicit value scala.language.postfixOps visible.
This can be achieved by adding the import clause 'import scala.language.postfixOps'
or by setting the compiler option -language:postfixOps.
See the Scaladoc for value scala.language.postfixOps for a discussion
why the feature should be explicitly enabled.
       data toUpperCase
            ^
res9: String = GUITAR
同样的事情也适用于你的例子。从可读性的角度来看,dot使您的示例更具可读性

scala> (1 to 10 by 3).toList
res9: List[Int] = List(1, 4, 7, 10)
此外,修复后的操作员可能会导致错误。例如,
1+“11”toInt
在计算结束时应用
toInt
,但可能我想要的是
1+“11”。toInt

另外,关于你的bug,你需要对编译器大喊大叫,停止用
链接
toList
或post fix运算符后的新行。或者您可以在post fix操作符之后使用
val
def
,这样编译器就知道它现在是不同的上下文了

scala> :paste

    import scala.language.postfixOps
    val range = 1 to 10 by 3 toList

    println(s"$range")

// Exiting paste mode, now interpreting.

List(1, 4, 7, 10)
import scala.language.postfixOps
range: List[Int] = List(1, 4, 7, 10)

另请阅读:

两者都应该有效。在scala中,可以省略
,并为方法调用留出空间,这可能是haskell way的一个坏版本。我认为根据官方文件,scala不建议使用空间-

例如:

scala> val data = "guitar"
data: String = guitar

scala> data.toUpperCase
res8: String = GUITAR
您可以使用空格代替

scala> data toUpperCase
<console>:13: warning: postfix operator toUpperCase should be enabled
by making the implicit value scala.language.postfixOps visible.
This can be achieved by adding the import clause 'import scala.language.postfixOps'
or by setting the compiler option -language:postfixOps.
See the Scaladoc for value scala.language.postfixOps for a discussion
why the feature should be explicitly enabled.
       data toUpperCase
            ^
res9: String = GUITAR
同样的事情也适用于你的例子。从可读性的角度来看,dot使您的示例更具可读性

scala> (1 to 10 by 3).toList
res9: List[Int] = List(1, 4, 7, 10)
此外,修复后的操作员可能会导致错误。例如,
1+“11”toInt
在计算结束时应用
toInt
,但可能我想要的是
1+“11”。toInt

另外,关于你的bug,你需要对编译器大喊大叫,停止用
链接
toList
或post fix运算符后的新行。或者您可以在post fix操作符之后使用
val
def
,这样编译器就知道它现在是不同的上下文了

scala> :paste

    import scala.language.postfixOps
    val range = 1 to 10 by 3 toList

    println(s"$range")

// Exiting paste mode, now interpreting.

List(1, 4, 7, 10)
import scala.language.postfixOps
range: List[Int] = List(1, 4, 7, 10)

另请阅读:

如果您遇到此错误

错误:(2,13)递归惰性值范围需要类型

。。。这是因为您使用了中缀(无点)符号,而您不应该这样做

println()
前面放一个空行,或者在
toList
后面放一个分号,这样就可以了

错误的原因是,
instance.method(argument)
可以转换为

instance method argument
。。。但是,如果您试图将
instance.method
转换为

instance method

编译器将查找缺少的
参数
,直到它遇到分号或空行。

如果您遇到此错误

错误:(2,13)递归惰性值范围需要类型

。。。这是因为您使用了中缀(无点)符号,而您不应该这样做

println()
前面放一个空行,或者在
toList
后面放一个分号,这样就可以了

错误的原因是,
instance.method(argument)
可以转换为

instance method argument
。。。但是,如果您试图将
instance.method
转换为

instance method

编译器将查找缺少的
参数
,直到它遇到分号或空行。

这实际上不是错误。只是IntelliJ被编译器关于后缀语法用法的警告弄糊涂了。我强烈建议您从更明确的语法开始,比如
val range=range(1,11,3)。toList
range.inclusive(1,10,3)
而不是
(1到10 x 3)。toList
包含
隐式
和后缀语法。一旦你掌握了一些东西,你就可以转向像这样更高级的东西。这是一个警告,告诉你如果你使用postfixOps(就像你所做的那样)
导入scala.language.postfixOps
你可以进入scala->general->advance language功能(勾选它)值得注意的是,
List
对象有一个
.range()
方法:
List.range(1,10,3)
No
.toList
需要进行转换。@HackingJ您需要用post-fix操作符结束这一行。这实际上不是一个错误。只是IntelliJ被编译器关于后缀语法用法的警告弄糊涂了。我强烈建议您从更明确的语法开始,比如
val range=range(1,11,3)。toList
range.inclusive(1,10,3)
而不是
(1到10 x 3)。toList
包含
隐式
和后缀语法。一旦你掌握了一些东西,你就可以转向像这样更高级的东西。这是一个警告,告诉你如果你使用postfixOps(就像你所做的那样)
导入scala.language.postfixOps
你可以进入scala->general->advance language功能(勾选它)值得注意的是,
List
对象有一个
.range()
方法:
List.range(1,10,3)
No
.toList
需要进行转换。@HackingJ您需要使用post-fix操作符结束行,也可以使用。