Scala часто используется таким образом для создания DSL, специфичных для домена языков.
Главным образом это происходит потому, что в Scala нет операторов, а синтаксис вызова метода Scala может быть сокращен. Например:
5 является целочисленным объектом. Для расчета 5 плюс 7 вы можете написать
val ans = 5.add (7) за исключением того, что метод сложения на самом деле называется «+», поэтому вы должны написать:
val ans = 5. + (7), но в Scala вам не нужно включать «.» в вызовах методов или в скобках "()" вокруг аргументов, чтобы вызвать метод + объекта 5, вы должны написать
val ans = 5 + 7, что прекрасно работает, потому что в Scala нет операторов, которые могли бы помешать вашей умной схеме именования методов. Теперь распространите эту идею на ваши собственные классы и объекты, включая тот факт, что вы можете «переопределить» такие методы, как +, а также создать свои собственные методы с именами >>> или ::! или @ * @, или просто текстовые имена, такие как fancify.