Можно ли интерполировать переменные или константы без сигилов?

да, вы можете перебирать все свойства объекта B в Qml. Но вы получите все свойства, включая сигналы и слоты.

в QML:

Item{
  A {
    id: a;
  }
  Componet.onCompleted: {
    var bItem = a.getChild(0)
    for (var p in bItem )
       console.log(p + ": " + item[p]);
  }
}

Это должно вернуть список свойств и значений, включая возраст.

4
задан jjmerelo 19 January 2019 в 18:05
поделиться

2 ответа

Все они в точности идентичны

          "a $b {$c}"
qq        "a $b {$c}"
Q :qq     "a $b {$c}"
Q :double "a $b {$c}"

Q :b :s :a :h :c :f "a $b {$c}"
Q :backslash :scalar :array :hash :closure :function "a $b {$c}"

Чтобы синтаксический анализатор строковых литералов рассматривал {} как создающее замыкание, ему необходимо включить функцию замыкания.

Одной из вещей, которую позволяют :qq / :double, является :c / :closure.

Вы также можете отключить его с помощью :!closure.

say qq :!closure "{ 1 + 2 }";
# { 1 + 2 }

То есть он начинается с семантики :qq / :double и отключает семантику :closure.


Здесь - это то, где функция qq определена в Rakudo

role qq does b1 does c1 does s1 does a1 does h1 does f1 {
    token starter { \" }
    token stopper { \" }
    method tweak_q($v) { self.panic("Too late for :q") }
    method tweak_qq($v) { self.panic("Too late for :qq") }
}

b1 включает обратную косую черту
c1 включает закрытие [ 1134]
s1 включает скаляр
a1 включает массив
h1 включает хэш
f1 включает функцию


[ 1149] Это задокументировано, и вы предоставили ссылку на документацию.
Возможно, можно пояснить, что:

  • "" - это сокращение от qq ""
  • qq "" - это сокращение от Q :qq "" / Q :double ""
  • [ 1141] :qq / :double сокращенно от всех :backslash :closure :scalar :array :hash :function.

Также, возможно, стоит добавить примеры для всех этих функций.

0
ответ дан Brad Gilbert 19 January 2019 в 18:05
поделиться

Я не рассматриваю это как недокументированную функцию, а скорее как присущую дизайну существующих функций.

Строка двойной кавычки ("...") интерполирует выражения вида {...} как код. Так что это просто работает.

Цитата q, по умолчанию, похожа на одиночную строку цитаты ('...'). Таким образом, по умолчанию он не интерполирует выражения вида {...}. Но если вы добавите наречие c, тогда действительно интерполирует эти блоки c од, поэтому то же самое, что по умолчанию работает в строках с двойными кавычками, работает и с q:c.

Или, может быть, Я что-то упустил. Мы, кажется, грубо дополняем наши слепоты. Вместе у нас может быть видение 50/50, что бы это ни значило. :)

0
ответ дан raiph 19 January 2019 в 18:05
поделиться
Другие вопросы по тегам:

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