0

これを使用してアンモナイトをインストールしました: 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 は、Scala 2.11.8 Java 1.8.0_101 で v 0.7.7 です。

非常に単純なアンモナイトスクリプトを試しました:

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

一方、同じコードを(最初にインポートせずに)アンモナイト 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)「再帰値ディレクトリにはタイプが必要」とはどういう意味ですか?

3) predef.sc の単一の「@」の意味は何ですか?

4

1 に答える 1

1
val dir = ls!
println(dir)

として取られる

val dir = ls.!(println(dir))

そのため、後置演算子は混乱を招きます。

意図した意味を得るために空白行を追加できます。

REPL 解析は行単位です。

于 2016-10-01T18:23:53.667 に答える