首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Ammonite脚本在REPL运行相同代码时失败?

为什么Ammonite脚本在REPL运行相同代码时失败?
EN

Stack Overflow用户
提问于 2016-10-01 15:36:47
回答 1查看 613关注 0票数 0

我使用以下代码安装了氨水:http://www.lihaoyi.com/Ammonite/#Ammonite-Shell

~/..ammonite/predef.sc是安装后的样子。

代码语言:javascript
复制
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)

用Scala2.11.8JAVA 1.8.0_101,氨水Repl为0.7.7

我尝试了非常简单的氨化脚本:

ammtest.sc是

代码语言:javascript
复制
/*
 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)

当我编译它时,我会得到以下错误:

代码语言:javascript
复制
$ 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

另一方面,当我复制/粘贴相同的代码(一开始没有导入)到氨化REPL时:

代码语言:javascript
复制
println("Hello World")

import java.util._
val date = new Date() 
println(date) 

val dir = ls!
println(dir)

它运行正常,没有任何错误。

1)我是否需要将更多的东西导入脚本中,以使它在REPL中运行,或者它有什么问题?(我知道脚本运行良好,如果更改,例如,val = ls!( pwd )

2)“递归值dir需要类型”是什么意思?

3) predef.sc中单一的"@“是什么意思?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-01 18:23:53

代码语言:javascript
复制
val dir = ls!
println(dir)

被视为

代码语言:javascript
复制
val dir = ls.!(println(dir))

这就是为什么后缀操作符令人困惑的原因。

您可以添加一个空行以获得预期的含义。

REPL解析是逐行的.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39808439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档