为什么 REPL 运行相同的代码时 Ammonite 脚本失败?
Why Ammonite script fails while REPL runs same code just fine?
我用这个安装了菊石:
http://www.lihaoyi.com/Ammonite/#Ammonite-Shell
~/.ammonite/predef.sc 是安装后的样子。
interp.load.ivy("com.lihaoyi" %% "ammonite-shell" % ammonite.Constants.version)
@
val shellSession = ammonite.shell.ShellSession()
import shellSession._
import ammonite.shell.PPrints._
import ammonite.ops._
import ammonite.shell._
ammonite.shell.Configure(repl, wd)
Ammonite Repl 是 v 0.7.7 和 Scala 2.11.8 Java 1.8.0_101
我尝试了非常简单的菊石脚本:
ammtest.sc 是
/*
This is ammonite script file.
*/
import ammonite._
import ammonite.ops._
import ammonite.ops.ImplicitWd._
println("Hello World")
import java.util._
val date = new Date()
println(date)
val dir = ls!
println(dir)
编译时出现以下错误:
$ amm ammtest.sc
Compiling ammtest.sc
ammtest.sc:17: recursive value dir needs type
println(dir)
^
ammtest.sc:17: type mismatch;
found : Unit
required: ammonite.ops.Path
println(dir)
^
Compilation Failed
另一方面,当我 copy/paste 将相同的代码(开头没有导入)添加到菊石 REPL 时:
println("Hello World")
import java.util._
val date = new Date()
println(date)
val dir = ls!
println(dir)
它运行正常,没有任何错误。
1) 我是否需要像在 REPL 中那样向脚本中导入更多内容才能获得它 运行 或者它有什么问题?
(我知道如果更改脚本运行正常,例如 val dir = ls!pwd )
2) "recursive value dir needs type" 是什么意思?
3) predef.sc中的单个“@”是什么意思?
val dir = ls!
println(dir)
被当作
val dir = ls.!(println(dir))
这就是后缀运算符令人困惑的原因。
您可以添加一个空行以获得预期的含义。
REPL 解析是逐行的。
我用这个安装了菊石: http://www.lihaoyi.com/Ammonite/#Ammonite-Shell
~/.ammonite/predef.sc 是安装后的样子。
interp.load.ivy("com.lihaoyi" %% "ammonite-shell" % ammonite.Constants.version)
@
val shellSession = ammonite.shell.ShellSession()
import shellSession._
import ammonite.shell.PPrints._
import ammonite.ops._
import ammonite.shell._
ammonite.shell.Configure(repl, wd)
Ammonite Repl 是 v 0.7.7 和 Scala 2.11.8 Java 1.8.0_101
我尝试了非常简单的菊石脚本:
ammtest.sc 是
/*
This is ammonite script file.
*/
import ammonite._
import ammonite.ops._
import ammonite.ops.ImplicitWd._
println("Hello World")
import java.util._
val date = new Date()
println(date)
val dir = ls!
println(dir)
编译时出现以下错误:
$ amm ammtest.sc
Compiling ammtest.sc
ammtest.sc:17: recursive value dir needs type
println(dir)
^
ammtest.sc:17: type mismatch;
found : Unit
required: ammonite.ops.Path
println(dir)
^
Compilation Failed
另一方面,当我 copy/paste 将相同的代码(开头没有导入)添加到菊石 REPL 时:
println("Hello World")
import java.util._
val date = new Date()
println(date)
val dir = ls!
println(dir)
它运行正常,没有任何错误。
1) 我是否需要像在 REPL 中那样向脚本中导入更多内容才能获得它 运行 或者它有什么问题? (我知道如果更改脚本运行正常,例如 val dir = ls!pwd )
2) "recursive value dir needs type" 是什么意思?
3) predef.sc中的单个“@”是什么意思?
val dir = ls!
println(dir)
被当作
val dir = ls.!(println(dir))
这就是后缀运算符令人困惑的原因。
您可以添加一个空行以获得预期的含义。
REPL 解析是逐行的。