Функция блокировки использования Kotlin не вызывается в File.printWriter () - PullRequest
0 голосов
/ 16 декабря 2018

Я новичок в Kotlin и пытаюсь выполнить простую задачу - создать и записать в файл.По какой-то причине использование use() с функцией блокировки на printWriter() фактически не записывает.

    File("test2.txt").printWriter().use { out ->
        {
            println("hmmm")
            out.println("what's up")
            log.info { "finished writing" }
        }
    }

На самом деле, функция блокировки, кажется, вообще не вызывается - оба "хммм""и" законченная запись "никогда не отображаются, хотя сам файл создан (но совершенно пустой).

Гораздо проще writeText() работает просто отлично - файл создан, и данный текст записан вфайл.

    File("test3.txt").writeText("testing")

Что я делаю неправильно в моей use() версии?

Редактировать : похоже, это проблема синтаксиса с моей функцией блокировки.Похоже, у меня есть лишняя пара скобок?Хотелось бы получить краткое объяснение того, почему это не работает.

Редактировать 2 : Думаю, теперь я понимаю.Так, как я написал, я по сути возвращал саму функцию блока, а не проходил через нее.

1 Ответ

0 голосов
/ 16 декабря 2018

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

Вот два способа, которые работают:

    File("test2.txt").printWriter().use {
        println("hmmm")
        it.println("what's up")
        log.info { "finished writing!" }
    }

    File("test2.txt").printWriter().use(fun(out) {
        println("hmmm")
        out.println("what's up")
        log.info { "finished writing!" }
    })

Хотя, для моих целей writeText() на самом деле работает просто отлично и намного короче хаха.

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