Как выполнить & ldquo; make; сделать установку & rdquo; внутри скрипта bash?

s - фактически метод на StringContext (или то, что может быть неявно преобразовано из StringContext). Когда вы пишете

whatever"Here is text $identifier and more text"

, компилятор записывает его в

StringContext("Here is text ", " and more text").whatever(identifier)

По умолчанию StringContext дает вам методы s, f и raw * .

Как вы можете видеть, сам компилятор выбирает имя и передает его методу. Поскольку это происходит во время компиляции, вы не можете разумно сделать это динамически - у компилятора нет информации об именах переменных во время выполнения.

Однако вы можете использовать vars, чтобы вы могли менять значения что ты хочешь. И метод по умолчанию s просто вызывает toString (как и следовало ожидать), чтобы вы могли играть в такие игры, как

class PrintCounter {
  var i = 0
  override def toString = { val ans = i.toString; i += 1; ans }
}

val pc = new PrintCounter
def pr[A](a: A) { println(s"$pc: $a") }
scala> List("salmon","herring").foreach(pr)
1: salmon
2: herring

(0 уже был вызван REPL в этом примере).

Это самое лучшее, что вы можете сделать.

* raw сломан и не должен быть установлен до 2.10.1; только текст до того, как переменная на самом деле является сырой (без обработки перехода). Так что держитесь от использования этого до тех пор, пока 2.10.1 не выйдет, или посмотрите исходный код и не определите свой собственный. По умолчанию, нет обработки отхода, поэтому определение вашего собственного довольно легко.

0
задан Cyrus 28 March 2019 в 09:03
поделиться