Как правильно указано @AndroidEx, присваивания не являются выражениями в Kotlin, в отличие от Java. Причина в том, что выражения с побочными эффектами обычно обескуражены. См. это обсуждение по аналогичной теме.
Одно из решений состоит в том, чтобы разделить выражение и перенести присвоение из блока условий:
a = b
if (a != c) { ... }
Другое один из них - использовать функции из stdlib, такие как let
, который выполняет лямбда с приемником в качестве параметра и возвращает результат лямбда. apply
и run
имеют схожую семантику.
if (b.let { a = it; it != c }) { ... }
if (run { a = b; b != c }) { ... }
Благодаря inlining это будет так же эффективно, как и обычный код взятый из лямбда.
Ваш пример с InputStream
будет выглядеть как
while (input.read(bytes).let { tmp = it; it != -1 }) { ... }
. Также рассмотрите функцию readBytes
для чтения a ByteArray
из InputStream
.
Это "Никакое Руководство Дерьма По Поддержке OpenID В Ваших Приложениях", кажется, не пошаговое руководство для того, что Вы хотите сделать.
Это напоминает мне, что документы обзора для рубинового-openid сервера все еще отсутствуют. Но Вы видите пример, и пока документы не портированы, см. документы для реализации Python, которая следует за той же объектной моделью.
Аутентификация OpenID эпизода 68 Railscasts описывает, как сделать точно это. Этому приблизительно год, таким образом, Вам, вероятно, придется сделать некоторый материал по-другому. Я был бы также сильно или для обновленного или для более нового плагина OpenID (ссылка для той в видео маркирована "устаревшей").
Допустите ошибку, ожидайте, который должен поддерживать аутентификацию OpenID в приложении направляющих, которое Вы пишете, для не выполнения конечной точки OpenID в направляющих.. Вот руководство по реализации сервера/конечной точки OpenID в направляющих, в значительной степени формируют царапину.. gem install openid-server
могло бы быть легче, но Вы узнаете больше, реализовывая его сами, и код довольно прост.