在Scala中,如果我想实现DSL,是否可以做以下方法:

我有一个称为“ draw”的对象,其中包含函数 def draw(d:Drawable)

我该如何做到这一点,以便我可以导入对象并将其称为外部对象之外的对象:

draw ball

如果球扩展了可绘制的特征?问题在于我想用一种插图符号使用绘制,但是我不想通过表示其实现类/对象来限定绘制功能。

有帮助吗?

解决方案

我迅速尝试了一下,但是可以使用对象使它起作用。在那里,我必须按照您的意愿使用绘制(球)而不是抽球球:


Welcome to Scala version 2.8.0.RC2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_20).

scala>特征可绘制{def dosomething}定义的特征可绘制

scala>对象绘制{
def draw(d:drawable)= d.d.dosomething}定义的模块绘制

scala> val ball = new drawable {def dosomething = println(“ do ball”)}球:java.lang.Object with with with with with with with with with with with with with with praingable = $ anon $ 1@3a4ba4d6

scala>导入draw._ import draw._

Scala> Draw Ball:11:错误:在对象绘制中缺少方法绘制的方法;如果要将其视为部分应用函数绘制球 ^

Scala> draw(球)做球

但是,通过将抽奖定义为班级,它确实有效:


scala> trait Drawable{def doSomething: Unit}
defined trait Drawable

scala> class draw {
def draw(d:drawable)= d.d.dosomething}定义的类绘制

Scala>

scala> val ball = new drawable {def dosomething = println(“ do ball”)} ball:java.lang.Object with with with with with with with with with with with with with with with praingable = $ anon $ 1@36a06816

scala> val d = new draw d:draw = draw@7194f467

Scala> D绘制球的球

我不完全确定为什么这与对象没有相同的方式,可能是一个错误,也许是指定的行为。但是,目前我没有时间查找。

其他提示

你做不到。除了四个前缀运算符外,在任何操作员符号中,第一个令牌代表对象。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top