Код Линго "[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

Окно палитры инспектора свойств Adobe Director Lingo, показывающее, что функция списка свойств работает нормально

Приведенный выше снимок экрана показывает, что он работает в Director 12.0 на OS X Yosemite.

Я думаю, это код отсюда, верно?

Это похоже на старую версию синтаксиса Lingo. [cc]по-видимому, расшифровывается как "продолжение характера". Это в основном заставляет компилятор игнорировать перенос строки сразу после него, так что он видит все из [#comment: в #default: VOID] как одна длинная строка, которая является синтаксически правильным способом ее записи.

Если я правильно помню, когда-то, ребята, которые сделали Линго, приняли еще одно сумасшедшее решение и заставили персонажа продолжения выглядеть так: ¬ Конечно, это не печаталось во многих местах, поэтому некоторые тексты, такие как ваша книга, использовали такие вещи, как [cc] на своем месте.

В современных версиях Lingo символ продолжения \так же, как в C.

Другие вопросы по тегам