Что такое "правильная" запись стандартного цикла чтения-while в Scala? Собственно я имею в виду, написанный с помощью Scala -поля, в отличие от Java-подобного.
Вот код, который у меня есть в Java:
MessageDigest md = MessageDigest.getInstance( "MD5" );
InputStream input = new FileInputStream( "file" );
byte[] buffer = new byte[1024];
int readLen;
while( ( readLen = input.read( buffer ) ) != -1 )
md.update( buffer, 0, readLen );
return md.digest();
Вот код, который у меня есть в Scala:
val md = MessageDigest.getInstance( hashInfo.algorithm )
val input = new FileInputStream( "file" )
val buffer = new Array[ Byte ]( 1024 )
var readLen = 0
while( readLen != -1 )
{
readLen = input.read( buffer )
if( readLen != -1 )
md.update( buffer, 0, readLen )
}
md.digest
Код Scala правильный и работает, но он чувствует себя очень не-w64 > -ish. Для одного это буквальный перевод кода Java, не использующий ни одно из преимуществ Scala. Кроме того, он на самом деле длиннее кода Java! Мне действительно кажется, что я что-то упускаю, но я не могу понять, что.
Я новичок в Scala, поэтому я задаю вопрос, чтобы не попасть в ловушку написания кода стиля Java в Scala. Меня больше интересует способ Scala решить эту проблему, чем в любом конкретном вспомогательном методе, который может быть предоставлен API Scala для хэш файла.
(Я заранее извиняюсь за свои ad hoc Scala прилагательные в этом вопросе.)