Ненормальное поведение при выходе из функции клавишей ESC при использовании base :: readline - PullRequest
1 голос
/ 21 октября 2019

Я использую цикл, который заполняет вектор. В какой-то момент я запрашиваю ввод данных пользователем, используя base::readline, который расположен до влияния вектора. Если я выйду из режима с помощью клавиши ESC во время командной строки, воздействие все равно будет выполнено, даже если это произойдет после этой командной строки.

Например, я бы запустил:

v1 <- character(1)

for (i in 1) {
  message(i)
  if (i == 1) {
    user_input <- readline("say something: ")
  }
  v1[i] <- i
}

, и я бы ушел, используя клавишу ESC, когда консоль выдает «что-то сказать». Тогда значение вектора будет:

> v1
[1] "1"

, тогда как оно должно быть "", поскольку я прерываю поток перед воздействием.

Мое первоначальное предположение состояло в том, что R все еще выполняет другой оператор передвыход из циклаХотя, когда я добавляю оператор print / message прямо перед воздействием, последний не выполняется, когда я убегаю, используя клавишу ESC. Например, когда я выполняю следующую инструкцию

v2 <- character(1)

for (i in 1) {
  message(i)
  if (i == 1) {
    user_input <- readline("say something: ")
  }
  message("before affectation")
  v2[i] <- i
}

и использую клавишу ESC в командной строке, сообщение "before affectation" не отображается. Еще более любопытно: воздействие на вектор не сделано (то есть значение v2 равно "", как и должно быть).

Кроме того, когда я добавляю функцию, у которой нет побочных эффектов (т.е. нет печати / сообщения / и т. Д.) Перед воздействием, то выполняется воздействие.

Я не могу понять эти различия в поведении. Заголовок моей информации о сеансе:

R version 3.3.0 (2016-05-03)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...