Kotlin для l oop не печатать в Kotlin Сценарий - PullRequest
0 голосов
/ 14 апреля 2020

Я новичок в Kotlin, и я играю с для l oop, в Kotlin Скрипт (файл * .kts) У меня есть это в файле:

for (i in 1..5) print("$i, ")

Я действительно думал, что это напечатало бы числа 1 - 5, разделенные запятыми в одной строке как это:

1, 2, 3, 4, 5, 

Но вместо этого я не получаю никакого вывода в командной строке. Я запускаю это на Ma c через

kotlin ranges.kts

Если я положу что-нибудь за этим синглом для l oop, как отдельный println () или если я заменю печать в l oop с println, это работает и дает мне вывод.

Я не понимаю этого поведения. Кто-нибудь может мне это объяснить?

Edit1: Версии: kotlin: 1.3.71 MacOS 10.15.4 (Catalina)

1 Ответ

3 голосов
/ 14 апреля 2020

Это не имеет ничего общего с for l oop и не имеет ничего общего с print. Это работает, если вы добавите System.out.flush() в конце скрипта. По умолчанию запись в System.out (которую print использует под капотом) не всегда вызывает грипп sh, и вполне вероятно, что обработчик сценариев Kotlin не сбрасывает стандартный поток вывода перед выходом.

Именно поэтому использование println работает, как вы заметили, - если вы посмотрите на реализацию из println в PrintStream, вы увидите, что она делает flu sh своей внутренние потоки вывода текста и символов.

Я создал проблему https://youtrack.jetbrains.com/issue/KT-38263.

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