2012-03-14 2 views
0

私はグルーヴィー学び始め、そして私が実践で学ぶことに似ているので、私は小さなアプリと書いている:groovyが辞書の値を見ないのはなぜですか?

def height = 1; def commands; def floors; def finished = false 

def up = { height < 5 ? height++ : println("Can't go higher!") } 
def down = { height > -1 ? height-- : println("Can't go lower!") } 
def help = { 
    print "Commands are " 
    commands.each{key, val -> print "'$key' "} 
    println() 
} 
def printFloors = { 
    println "Floors are " 
    floors.each{key,val -> println "'$key' -> '$val'"} 
    println() 
} 
def exit = { finished = true } 
def prompt = { print floors["$height"] } 

commands = [ 'u': up, 
      'up': up, 
      'd': down, 
      'down': down, 
      'help': help, 
      '': help, 
      'exit': exit, 
      'pf': printFloors] 

floors = [ "-1": "Basement : " , 
      "0": "Ground : " , 
      "5": "Penthouse : " ] 
(1..4).each{floors += ["${it}" : "Floor ${it} : " ] } 

bR = new BufferedReader(new InputStreamReader(System.in)) 

while(!finished){ 
    prompt() 
    def cmd = bR.readLine() 
    def code = commands[cmd] 
    if(code != null){ 
     code() 
    } 
} 

すべてがあなたが(プロンプト機能)である床面に印刷を除いて正常に動作します。地階、地上階またはペントハウスにいる場合は印刷されますが、 "Floor i:"をピックアップせず、代わりにヌルを印刷します:/ "pf"と入力してフロア辞書を印刷すると、値が表示されます... 何か案は? ありがとう

答えて

7

マップにGStringインスタンスをキーとして追加し、次にStringインスタンスを使用して検索しています。

二つが(同じ外観を有するにもかかわらず - on this page "をGStringのが文字列ではない" を参照)と同じではない

変更してみてください:

(1..4).each{floors += [ ("${it}".toString()): "Floor ${it} : " ] } 

(1..4).each{floors += ["${it}" : "Floor ${it} : " ] } 

+1

素晴らしい!あなたは男です!ありがとう! –

+0

等価の行は '(1..4).each {floor [it as String] =" Floor $ {it}: "}'となります。 – epidemian

+0

@epidemian私は好きです: 'floors <<(1..4)*。toString()。collectEntries {[(it):" Floor $ {it}: "]};' ;-) –

関連する問題