import scala.util.matching.Regex
import scala.util.matching.Regex.Groups
def calc(s: String): Unit = {
new Regex("""\s*([-+]?\d+)\s*([-+*/])\s*([-+]?\d+)\s*""")
.findFirstMatchIn(s)
.map {
case Groups(a, op, b) => (a.toDouble, op, b.toDouble)
}
.map {
case (a, "*", b) => a * b
case (a, "/", b) => a / b
case (a, "+", b) => a + b
case (a, "-", b) => a - b
}
.foreach(println)
}
Добавлю, что важный недостаток (а иногда и нет) HOCON — это наличие include, но отсутствие require. Если конфиг, указанный по пути include не найден, он будет проигнорирован без каких-либо предупреждений. Так что будьте осторожнее.
Когда я писал сервисы с использованием Node.JS, через некоторое время осознал, что DI уже встроен в Node.JS. Посудите сами:
1. Нужно на момент запуска приложения решить, какую реализацию выбрать? Не проблема — делаем proxy js'ник, который вернет нужную реализацию, например, на основе конфига.
2. Нужно покрыть модуль юнит-тестами? Не проблема — мокаем с помощью proxyquire.
require по своей природе является Service Locator.
Scala:
Примеры несколько странные, можно же написать проще, вместо:
писать:
и это будет тоже HOCON.
Добавлю, что важный недостаток (а иногда и нет) HOCON — это наличие include, но отсутствие require. Если конфиг, указанный по пути include не найден, он будет проигнорирован без каких-либо предупреждений. Так что будьте осторожнее.
1. Нужно на момент запуска приложения решить, какую реализацию выбрать? Не проблема — делаем proxy js'ник, который вернет нужную реализацию, например, на основе конфига.
2. Нужно покрыть модуль юнит-тестами? Не проблема — мокаем с помощью proxyquire.
require по своей природе является Service Locator.