Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala REPL中的浮点文本出错_Scala_Floating Point_Literals_Read Eval Print Loop_Scala Repl - Fatal编程技术网

Scala REPL中的浮点文本出错

Scala REPL中的浮点文本出错,scala,floating-point,literals,read-eval-print-loop,scala-repl,Scala,Floating Point,Literals,Read Eval Print Loop,Scala Repl,Scala中浮点文字的定义是 floatingPointLiteral ::= digit {digit} ‘.’ digit {digit} [exponentPart] [floatType] | ‘.’ digit {digit} [exponentPart] [floatType] | digit {digit} exponentPart [floatType]

Scala中浮点文字的定义是

floatingPointLiteral  ::=  digit {digit} ‘.’ digit {digit} [exponentPart] [floatType]
                        |  ‘.’ digit {digit} [exponentPart] [floatType]
                        |  digit {digit} exponentPart [floatType]
                        |  digit {digit} [exponentPart] floatType
exponentPart          ::=  (‘E’ | ‘e’) [‘+’ | ‘-’] digit {digit}
floatType             ::=  ‘F’ | ‘f’ | ‘D’ | ‘d’
当我尝试输入以点开头的浮点文字时,我得到一个错误:

scala> .123
        ^
   error: ';' expected but double literal found.
如果将这样的文字赋给某个变量,一切都很好

scala> val x = .123
x: Double = 0.123

为什么会这样?

您粘贴的引用可能来自

在回答您的问题之前,让我们注意以下几点:

scala> 1.213
res1: Double = 1.213
所以这里的问题不是浮点,而是表达式以点开头的事实。它使控制台像普通的Scala程序一样,计算最后一个计算对象上的表达式

让我们做一个例子:

scala> val d = 1.123
d: Double = 1.123

scala> .equals(1.123)
res10: Boolean = true

scala> .equals(1.123)
res11: Boolean = false

scala> .toString
res12: String = false
正如你所看到的,每一条新线,都是前一条线的后续。您可以返回,例如:

scala> res10
res13: Boolean = true
但缓存中的对象是最后一个结果

在您的示例中,控制台的最后一次成功运行可能是val x=.123,它将最后一次res设置为Double。当您运行.123时,您正在启动另一个BlockStat。lexer识别出它是一个块,因此需要一个半块,它是一个块;在不同的BlockStats之间

启动新控制台时,它会按预期工作:

scala> .123
res0: Double = 0.123

为什么您需要在Scala控制台中写入任何数字而不进行任何分配或返回?这个数字是没有意义的。或者使用菊石,这是更好的Scala REPL比香草REPL。它正确处理此情况。是否还需要数字{digit}'。[exponentPart][floatType]?123.e45是不允许的吗?