Понижение приоритета инфиксного оператора в R?

Массивы Javascript - это объекты. Подробнее см. В https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Predefined_Core_Objects#Array_Object .

Примечание: если вы поставьте нецелое значение для оператора массива в приведенном выше коде, свойство будет создано в объекте, представляющем массив, вместо элемента массива.

blockquote>

JSON поддерживает только подмножество Javascript. Подробнее см. В http://www.json.org/ .

JSON построен на двух структурах:

  • Коллекция пар имен / значений. На разных языках это реализуется как объект, запись, структура, словарь, хэш-таблица, список клавиш или ассоциативный массив.
  • Упорядоченный список значений. В большинстве языков это реализуется как массив, вектор, список или последовательность.
blockquote>

Массив Javascript, который имеет свойства, созданные в базовом объекте, не вписывается ни в один из эти структуры, поскольку в ней есть как набор пар имя / значение, так и упорядоченный список значений, поэтому нет простого способа представления такого объекта непосредственно в JSON.

Метод JSON.stringify определен в спецификации ECMAScript. Например, см. http://www.ecma-international.org/ecma-262/5.1/#sec-15.12.3 .

Хотя есть много деталей, бит, который имеет значение здесь, - это то, как строятся значения объекта:

Если Type (value) - Object, а IsCallable (значение) - false

  • Если кнопка [ [Class]] внутреннее свойство value - «Array», а затем возвращает результат вызова абстрактной операции JA с аргументом.
  • Else, возвращает результат вызова абстрактной операции JO с аргументом.
blockquote>

Учитывая ваш массив, несмотря на добавление параметров к базовому объекту, результатом является упорядочение упорядоченного набора элементов массива, а не основного объекта.

Нет ничего плохого в добавлении параметров в объект массива, но они не являются частью массива, а функции или методы, которые обрабатывают массивы, могут игнорировать их или решать с ними произвольно. Вы видели, что JSON.stringify игнорирует дополнительные параметры. Другие функции могут работать иначе - вам нужно будет узнать в каждом случае.

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

Вместо:

var b = [];
b['foo'] = 56;
b['bar'] = 78;

Вы можете использовать:

var b = {};
b['foo'] = 56;
b['bar'] = 78;

3
задан Benjamin 16 January 2019 в 15:04
поделиться

1 ответ

R не имеет никакого способа контролировать приоритет оператора. Это описано на странице справки ?Syntax. Ваша проблема в том, что отрицание имеет более низкий приоритет, чем специальные операторы, поэтому

!q %->% !p

анализируется как

!(q %->% !p)

Возможно, лучший совет - не пытаться использовать R для проекта, который вы продолжаем работать, так как он не предназначен для такого рода вещей. Однако то, что вы хотите , может быть возможным: R позволяет вам видеть дерево разбора из выражения и сообщает, где встречаются круглые скобки:

> getParseData(parse(text="!q %->% !p"))
   line1 col1 line2 col2 id parent   token terminal text
11     1    1     1   10 11      0    expr    FALSE     
1      1    1     1    1  1     11     '!'     TRUE    !
10     1    2     1   10 10     11    expr    FALSE     
2      1    2     1    2  2      4  SYMBOL     TRUE    q
4      1    2     1    2  4     10    expr    FALSE     
3      1    4     1    7  3     10 SPECIAL     TRUE %->%
9      1    9     1   10  9     10    expr    FALSE     
5      1    9     1    9  5      9     '!'     TRUE    !
6      1   10     1   10  6      8  SYMBOL     TRUE    p
8      1   10     1   10  8      9    expr    FALSE     

Возможно, это позволит вам написать функция, которая может изменить выражение, чтобы дать ! более высокий приоритет, чем %->%.

В качестве альтернативы ваша функция может просто выполнить подстановку текста, чтобы перед синтаксическим анализом заменить %->% или ! на другой оператор приоритета, а затем изменить его обратно до оценки.

0
ответ дан user2554330 16 January 2019 в 15:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: