Честно говоря, я думаю, что это звучит так, как будто вам нужно немного поближе познакомиться, потому что пример не явно функциональный и не очень беглый. Кажется, вы можете смешивать беглость с неидемпотентным в том смысле, что ваш debugPrint
метод, вероятно, выполняет ввод-вывод, а throwIfError
вызывает исключения. Это то, что вы имеете в виду?
Если вы имеете в виду, функционален ли Stateful Builder , ответ будет «не в чистом смысле». Однако обратите внимание, что сборщик не обязательно должен быть с состоянием.
case class Person(name: String, age: Int)
Во-первых; это может быть создано с использованием именованных параметров:
Person(name="Oxbow", age=36)
Или строитель без гражданства:
object Person {
def withName(name: String)
= new { def andAge(age: Int) = new Person(name, age) }
}
Привет, до:
scala> Person withName "Oxbow" andAge 36
Что касается использования нетипизированных строк для определения запроса, который вы делаете; это плохая форма в статически типизированном языке. Более того, нет необходимости:
sealed trait Query
case object orders extends Query
def get(query: Query): Result
Привет, preto:
api get orders
Хотя я думаю, что это плохая идея - у вас не должно быть единственного метода, который мог бы дать вам условно совершенно разные типы результатов
<Ч />
В заключение: лично я думаю, что нет никакой причины, по которой беглость и функционал не могут смешиваться, поскольку функционал просто указывает на отсутствие изменяемого состояния и сильное предпочтение идемпотентных функций для выполнения вашей логики.
Вот один для вас:
args.map(_.toInt)
args map toInt
Я бы сказал, что второе более свободно. Это возможно, если вы определите:
val toInt = (_ : String).toInt
То есть; если вы определите функцию. Я нахожу функции и беглость речи очень хорошо в Scala.