Вложенная строковая интерполяция в Scala

Swift 4:

let timer = Timer.scheduledTimer(timeInterval: 8.0, target: self, selector: #selector(segueToSignIn), userInfo: nil, repeats: false)

@objc func segueToSignIn() {
    self.performSegue(withIdentifier: "SignInSegue", sender: self)
}
0
задан Andrey Tyukin 13 July 2018 в 14:15
поделиться

3 ответа

4
ответ дан som-snytt 17 August 2018 в 12:39
поделиться

Строковая интерполяция Scala

s"Database is ${DBASE} and frequency is ${FREQ}"

по существу является просто причудливым синтаксисом для вызова метода на StringContext. Он desugars к чему-то вроде

StringContext("Database is ", " and frequency is ",  "").s(DBASE, FREQ)

. Хотя вы могли теоретически разбить строку "Database is ${DBASE} and frequency is ${FREQ}" на куски, подходящие для StringContext, а затем где-то искать переменные DBASE и FREQ кажется, что гораздо легче replaceAll вхождения $$${DBASE} и $$${FREQ} сразу.

1
ответ дан Andrey Tyukin 17 August 2018 в 12:39
поделиться
  • 1
    Просто эта строка составляет почти 50 000 символов (параметризованный SQL-запрос, который мне нужно выполнить), поэтому я не думаю, что будет очень возможно разделить и использовать StringContext. Думаю, я буду использовать replaceAll. – philantrovert 13 July 2018 в 14:20
  • 2
    @philantrovert Я не уверен, почему вы пытаетесь вручную подключить параметры к запросам, возвращаемым другими запросами ... Похоже на странный строгий тип дизайна. Нет ли способа использовать какое-то подготовленное заявление? – Andrey Tyukin 13 July 2018 в 14:22
  • 3
    Нет, запрос должен быть передан в улей. – philantrovert 13 July 2018 в 14:40

Я думаю, что динамически невозможно интерполировать строку, как это происходит во время самого компиляции.

1) Интерполяция строк происходит во время компиляции, поэтому компилятор обычно не имеет достаточной информации для интерполяции s (queryResult). Он ожидает строковый литерал в соответствии с https://docs.scala-lang.org/sips/string-interpolation.html .

2) В разделе «Расширенное использование» в документации , объясняется, что выражение формы id «Hello $ name». переводится во время компиляции в новый StringContext («Hello», «.»). id (name).

Таким образом, вы можете создать что-то вроде

StringContext("Database is ", " and frequency is ",  "").s(DBASE, FREQ)

, которое заменит синтаксический suger. Надеюсь, что это поможет.

0
ответ дан Chaitanya Waikar 17 August 2018 в 12:39
поделиться
Другие вопросы по тегам:

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