(1到10乘3)toList和(1到10乘3)toList在scala(或intellij问题)中的区别是什么
如果这个问题很愚蠢,请理解 我开始学习scala的基本语法 但我不明白为什么一个是错误,另一个不是。我用scala工作表对此进行了测试(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
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操作符结束行,也可以使用。