Ich installierte Ammoniten mit diesem: http://www.lihaoyi.com/Ammonite/#Ammonite-ShellWarum Ammonit-Skript fehlschlägt, während REPL denselben Code ausführt?
~/.ammonite/predef.sc ist, wie es nach der Installation wurde.
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)
Ammoniten Repl ist v 0.7.7 mit Scala 2.11.8 Java 1.8.0_101
ich sehr einfach Ammoniten Skript versucht:
ammtest.sc ist
/*
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)
Wenn Ich kompiliere es Ich erhalte folgenden Fehler:
$ 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
Auf der anderen Seite, wenn ich Kopieren/den gleichen Code einfügen (ohne Importe am Anfang) an den Ammoniten REPL:
println("Hello World")
import java.util._
val date = new Date()
println(date)
val dir = ls!
println(dir)
es läuft OK ohne Fehler.
1) Muss ich etwas mehr in das Skript importieren, damit es wie in REPL läuft oder was ist das Problem damit? (Ich weiß, dass das Skript ausgeführt wird, wenn geändert z. B. val dir = ls! Pwd)
2) Was bedeutet "rekursive Wert Dir muss Typ" bedeuten
3) Was bedeutet die einzelne "@" in der predef.sc?
Semikolon am Ende der Zeile funktioniert auch: val dir = ls !; Weißt du zufällig, was die einzelne "@" in der predef.sc bedeutet? – user4955663
Semikolon wäre meine letzte Wahl nach 'ls.!' Und '(ls!)'; Ich neige dazu, Semi für Single-Liner zu reservieren. Siehe http://www.lihaoyi.com/Ammonite/#MultistageScripts –