списки определены-вметод вроде не работает - PullRequest
0 голосов
/ 25 апреля 2018

в разных случаях я сталкивался с этой проблемой.

Я хочу проверить, определено ли какое-либо значение в списке, но vmethod для списков возвращает только false;

, например, в этом случае:

  lines = "polyline";
  validLineOptions = ['line', 'polyline', 'curved', 'ortho', 'spline'];
  IF validLineOptions.defined(lines);
    GET( "/* using style " _ lines _ "*/\n");
  ELSE;
    GET( "/* using default style */\n");
    lines = '';
  END;  

это всегда выполняется в предложении ELSE.

некоторая информация о версии:

This is perl 5, version 26, subversion 0 (v5.26.0) built for MSWin32-x86-multi-thread-64int

  Wed May 31 02:57:08 2017: "Module" Template
    *   "installed into: C:\strawberry\perl\vendor\lib"
    *   "LINKTYPE: dynamic"
    *   "VERSION: 2.27"
    *   "EXE_FILES: bin/tpage bin/ttree"

1 Ответ

0 голосов
/ 25 апреля 2018

Вы не можете использовать значение элемента списка для его поиска.

Это то, что документация говорит о defined в списках (массивы в TT).

Возвращает значение true или false, если определен элемент в списке, обозначенный аргументом.

[% list.defined(3) ? 'yes' : 'no' %]

При вызове без аргументов list.define возвращает true, если сам список определен (например, тот же эффект, что и scalar.defined).

Однако это то, что вы делаете.

lines = "polyline";
validLineOptions.defined(lines)

Используется переменная lines со строковым значением в качестве index списка.Индекс должен быть числом, потому что мы не имеем дело с hash (ассоциативный массив).Значения в этом списке упорядочены и пронумерованы.Вы не можете получить к ним доступ по значению.

Я думаю, вы пытаетесь проверить, существует ли значение в списке.Есть несколько способов сделать это.

validLineOptions.grep(lines)

использует grep, чтобы найти элемент в массиве и проверяет, является ли количество возвращаемых значений истинным.Если совпадений не найдено, возвращается false.

Однако вы также можете использовать хеш в качестве поиска.

lines = "polyline";
validLineOptions = {
    'line'     = 1, 
    'polyline' = 1, 
    'curved'   = 1, 
    'ortho'    = 1, 
    'spline'   = 1
};
IF validLineOptions.exists(lines);

Это проверит, введена ли клавиша вхеш существует .Это простой способ проверить, разрешено ли значение.

...