Переменная имени апостроф на scala для сжатия - PullRequest
0 голосов
/ 26 июня 2019

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

val `#(X)'s` = List(1,2,3,4,5)

for {
  numberOfX <- `#(X)'s`
} println(numberOfX)

но я не могу сделать более читаемый код

val `#(X)'s` = List(1,2,3,4,5)
for {
  `#(X)` <- `#(X)'s`
} println(`#(X)`)

Как мне сделать это именование переменных внутри scala для сжатия?

Спасибо за поддержку.

Моя ошибка

Похоже, я тоже упростила соответствие кода (идея также не понимает код). Мне очень жаль, пожалуйста, смотрите следующий код

val `#(X)'s` = List(1,2,3,4,5)

for {
  `#(X)` <- `#(X)'s`
  `2x#(X)` = 2*`#(X)`
} println(`#(X)`)

Error

Error:(9, 9) not found: value #(X)
`#(X)` <- `#(X)'s`

1 Ответ

0 голосов
/ 29 июня 2019

Если мы снимаем следующее выражение для понимания

for {
  `c` <- List(42)
  foo = 7
} () 

, мы получаем

List(42).map(((x$2: Int) => (x$2: @scala.unchecked) match {
  case (x$1 @ `c`) => {
    val foo = 7;
    scala.Tuple2(x$1, foo)
  }
})).foreach(((x$3: <error>) => (x$3: @scala.unchecked) match {
  case scala.Tuple2(`c`, (foo @ _)) => ()
}))

, где мы видим переменную с обратным символом `c`, появляющуюся внутри совпадения с образцом

case (x$1 @ `c`) => ...

Обратные кавычки внутри сопоставления с образцом используются для сопоставления с стабильным идентификатором из внешней области видимости, которая здесь не определена, следовательно, ошибка компилятора.

Возможнокто-то, знающий, может определить, является ли это ошибкой компилятора, но кажется, что поведение существует с 2.10.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...