Scala DSL - 简单数学

时间:2014-04-14 20:27:23

标签: scala math dsl

我在Scala相对较新,而且我在与DSL挣扎。目前我正在尝试实现一种可以与某种自然语言一起使用的简单数学DSL。

我的想法:

打印(计算4加6)=>返回10

打印(计算4分钟2)=>返回2 ......等等

到目前为止,我已经实现了两个类。主要用于调用方法和计算类的主类。我的问题是我不知道如何将第一个数字传递给计算对象,因为不允许定义参数。

任何人都可以帮助一个例子吗?

1 个答案:

答案 0 :(得分:2)

你会遇到一些麻烦,因为Scala想要解析的自然形式是class-instance method argument method argument method argument ...,这种感觉就像一种自然语言,这与英语不同。

但是,这是一个让你入门的框架,有许多额外的样板语法可以使解析工作正常。

object Now {
  class Value(val please: Double) {
    def plus(d: Double) = new Value(please + d)
    def minus(d: Double) = new Value(please - d)
    override def toString = please.toString
  }
  def calculate(d: Double): Value = new Value(d)
}

这里它正在工作(在import language.postfixOps之后):

scala> Now calculate 4 plus 6 please
res1: Double = 10.0

顺便提一下,已经有一种非常好的自然方式可以要求4 + 6 ......它是4+6。它适用于许多不同语言的扬声器,也适用于几乎所有计算机语言。所以这个DSL可能对玩具来说很有趣,但我不确定它的实用性是什么。