Почему Groovy не видит некоторые значения в словаре? - PullRequest
0 голосов
/ 14 марта 2012

Я начал учиться 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()
    }
}

Все отлично работает, кроме печати на том этаже, на котором вы находитесь (функция подсказки). Он печатает, если вы находитесь в подвале, на первом этаже или в пентхаусе, но не поднимает «Этаж i:» и вместо этого печатает ноль: / Когда я набираю «pf», чтобы напечатать мой словарь этажей, там есть значения ... Есть идеи? Спасибо

1 Ответ

7 голосов
/ 14 марта 2012

Вы добавляете GString экземпляров в качестве ключей на карту, а затем ищете их, используя String экземпляров.

Они не одинаковы (несмотря на то, что выглядят одинаково - см. «GStrings not Strings» раздел на этой странице )

Попробуйте изменить:

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

на

(1..4).each{floors += [ ("${it}".toString()): "Floor ${it} : " ] }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...