2014-11-03 3 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.

Verwandte Themen