Код Линго "[cc]" появляется как ошибка
Игра представляет собой игру в поиске слов в продвинутой книге жаргонных слов, и в коде жаргонного языка используется [cc], который появляется как ошибка кода. Что не так или это использование [cc] устарело? И если так, как это можно исправить?
on getPropertyDescriptionList me
list = [:]
-- the text member with the words in it
addProp list, #pWordSource,[cc]
[#comment: "Word Source",[cc]
#format: #text,[cc]
#default: VOID]
addProp list, #pEndGameFrame,[cc]
[#comment: "End Game Frame",[cc]
#format: #marker,[cc]
#default: #next]
return list
end
2 ответа
Я программировал в раннем режиссере, но с тех пор перешел на другие языки. Я понимаю этот код. Функция пытается сгенерировать словарь словарей. в квази-JSON:
{
'pWordSource': { ... } ,
'pEndGameFrame': { ... }
}
Он создает строковый хеш, а затем сохраняет "pWordSource" в качестве нового ключа, указывающего на собственный 3-х элементный хеш. Затем система повторяет процесс с новым ключом "pEndGameFrame", предоставляя еще один хэш из трех элементов. Так что просто расширим эллипсы... из приведенного выше примера кода:
{
'pWordSource': { 'comment': 'Word Source', 'format': 'text', 'default': null } ,
'pEndGameFrame': { 'End Game Frame': 'Word Source', 'format': 'marker', 'default': 'next' }
}
Поэтому я надеюсь, что это объясняет хэш-символы. Это способ выражения языка "это не просто строка, это специальная система, зависящая от директора, которую мы называем символом. Она может быть описана в более традиционных терминах программирования как константа. Компилятор lingo заменит ваш # string1 на целое число, и оно всегда будет одним и тем же целым числом, связанным с # string 1. Поскольку ключи хеша на самом деле являются целыми числами, а не строками, мы можем изменить модель json, чтобы она выглядела примерно так:
{
0: { 2: 'Word Source', 3: 'text', 4: null } ,
1: { 2:'End Game Frame', 3: 'marker', 4: 'next' }
}
где:
0 -> pWordSource
1 -> pEndGameFrame
2 -> comment
3 -> format
4 -> default
Таким образом, чтобы имитировать такое же поведение конструкции в жаргоне 2016 года, мы используем более новый объектно-ориентированный синтаксис точек для вызова addProp в списках свойств.
on getPropertyDescriptionList me
list = [:]
-- the text member with the words in it
list.addProp(#pWordSource,[ \
#comment: "Word Source", \
#format: #text, \
#default: void \
])
list.addProp(#pEndGameFrame,[ \
#comment: "End Game Frame", \
#format: #marker, \
#default: #next \
])
return list
end
Аналогично, в той же ссылке показаны примеры использования квадратных скобок для "доступа" к свойствам, а затем их инициализации путем установки их первого значения.
on getPropertyDescriptionList me
list = [:]
-- the text member with the words in it
list[#pWordSource] = [ \
#comment: "Word Source", \
#format: #text, \
#default: void \
]
list[#pEndGameFrame] = [ \
#comment: "End Game Frame", \
#format: #marker, \
#default: #next \
]
return list
end
И если вы все еще не понимаете, что делает обратная косая черта, есть другие способы сделать код более вертикальным.
on getPropertyDescriptionList me
list = [:]
-- the text member with the words in it
p = [:]
p[#comment] = "Word Source"
p[#format] = #text
p[#default] = void
list[#pWordSource] = p
p = [:] -- allocate new dict to avoid pointer bug
p[#comment] = "End Game Frame"
p[#format] = #marker
p[#default] = #next
list[#pEndGameFrame] = p
return list
end
Приведенный выше снимок экрана показывает, что он работает в Director 12.0 на OS X Yosemite.
Я думаю, это код отсюда, верно?
Это похоже на старую версию синтаксиса Lingo. [cc]
по-видимому, расшифровывается как "продолжение характера". Это в основном заставляет компилятор игнорировать перенос строки сразу после него, так что он видит все из [#comment:
в #default: VOID]
как одна длинная строка, которая является синтаксически правильным способом ее записи.
Если я правильно помню, когда-то, ребята, которые сделали Линго, приняли еще одно сумасшедшее решение и заставили персонажа продолжения выглядеть так: ¬
Конечно, это не печаталось во многих местах, поэтому некоторые тексты, такие как ваша книга, использовали такие вещи, как [cc]
на своем месте.
В современных версиях Lingo символ продолжения \
так же, как в C.