Есть код на Java:
@SneakyThrows
public static void main(String[] args) {
Files.walk(Paths.get(args[0]))
.parallel()
.filter(Files::isRegularFile)
.filter(item -> item.toString().endsWith(".bilog"))
.map(path ->
new JavaClassFile(
path,
new BLCodeFile(path).asBytecode()
)
)
.forEach(JavaClass::save);
}
public final class JavaClassFile implements JavaClass
public interface JavaClass {
void save();
}
Хотелось бы написать аналогичный на Scala. Сначала попробовал просто переписать, и не получается вызвать save y trait JavaClass:
def main(args: Array[String]): Unit = {
Files.walk(Paths get args(0))
.parallel
.filter(Files isRegularFile _)
.filter(_.toString endsWith ".bilog")
.map(new JavaClassFile(_, new InsnList))
.forEach(???)
}
final class JavaClassFile(private val path : Path, private val code : InsnList) extends JavaClass {
override def save(): Unit = println(path)
}
trait JavaClass {
def save()
}
Как будет выглядеть аналогичный идиоматический код на Scala?
Можно полностью изменить кусок, оставив логику:
for(file <- new File(args(0)).listFiles if file.getName endsWith ".bilog") {
if (Files.isRegularFile(file.toPath)) {
new JavaClassFile(file.toPath, new InsnList()).save()
}
}
А можно чуть изменить ваш код, добавив информацию по типам:
Files.walk(Paths get args(0))
.parallel
.filter { case x: Path => Files isRegularFile x }
.filter { case x: Path => x.toString endsWith ".bilog"}
.map { case x: Path => new JavaClassFile(x, new InsnList) }
.forEach { case x: JavaClassFile => x.save() }
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть проект система управления СТОВ функционал входит распределение и планирование работ между сотрудниками и "мостами" для ремонта
Я делаю класс активити, в котором аутентификацияУ меня ошибка: