2014-11-03 1 views

Antwort

34

Dies ist das Standardverhalten in der Groovy-Shell, das nicht der Grails-Shell eigen ist. Sie wollen wahrscheinlich nicht def die Variable. Siehe die folgenden:

~ $ groovysh 
Groovy Shell (2.3.4, JVM: 1.7.0_45) 
Type ':help' or ':h' for help. 
------------------------------------------------------------------------------- 
groovy:000> def x = 42 
===> 42 
groovy:000> x 
Unknown property: x 
groovy:000> y = 2112 
===> 2112 
groovy:000> y 
===> 2112 
groovy:000> 

Von http://beta.groovy-lang.org/groovysh.html

1.3.4. Variablen

Shell-Variablen sind alle untypisierten (dh. Nicht def oder eine andere Art Informationen).

Dies wird eine Shell-Variable gesetzt:

foo = "bar" 

Aber, wird dies eine lokale Variable bewerten und die Umwelt nicht gespeichert werden Shell:

def foo = "bar" 
kann

Sie ändern Dieses Verhalten durch Aktivieren interpreterMode

groovy:000> := interpreterMode 
groovy:000> def x = 42 
===> 42 
groovy:000> x 
===> 42 
groovy:000> 
+4

Wow, das ist wirklich verwirrend. Warum würde der Typ auf Standard-Java-Art deklarieren, oder def auf Grails-Art verwenden, in der Konsole fehlschlagen, aber nicht in der App? Ich habe eine Stunde damit verbracht, nach Beispielen zu suchen, die zeigen, wie man die Konsole benutzt, einschließlich meiner 6 groovigen und Gails-Bücher, mit keinem einzigen Eintrag. Wie hast du das gemacht? –

+0

"Wie hast du das gemacht?"- Ich habe es ausgearbeitet, weil ich im Groovy and Grails Team bin und ich weiß, wie das funktioniert. –

+0

Siehe Abschnitt 1.3.4 unter http://beta.groovy-lang.org/groovysh.html –

1

"def" sind mehr wie kompilierte Variablen in Java (zu einem gewissen Grad), kompiliert (vielleicht Typ ist unbekannt/dynamisch, aber Name/Existenz der Variable/Eigenschaft ist bekannt).

def xyz = 1 ->Object xyz = 1;

Ohne "def" werden zu bestimmten Container Binder mit Namen, in vollständig dynamisch. Stellen Sie sich diese wie spezifische Karte (sorry für Einfachheit)

binder["xyz"] = 1; 

Meine persönliche Füllung ist, dass doc Groovy nicht illustriert diesen (sehr groß) Unterschied deutlich. Wort "untypisiert" scheint zu schwach. Die Implementierung von "Speicher" für diese beiden ist völlig anders.