Scala DSL, Объектная и инфиксная нотация

в Scala, если я хочу реализовать DSL, там способ сделать следующее:

Мне назвали Объект, "Тянут", который содержит функцию def draw(d:Drawable)

как может я делать его так, чтобы я мог импортировать Объект и назвать его вне объекта как:

draw ball

если шар расширяет черту Drawable? Проблема состоит в том, что я хочу использовать, тянут в своего рода инфиксной нотации, но я не хочу квалифицировать функциональную ничью путем обозначения, что это - класс с реализацией / объект.

6
задан Felix 19 May 2010 в 18:40
поделиться

2 ответа

Я быстро попробовал, но вполне мог заставить его работать с помощью объекта. Там мне пришлось использовать draw (мяч) вместо draw ball, как вы хотели:


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

scala> trait Drawable{def doSomething} defined trait Drawable

scala> object Draw {
def draw(d:Drawable) = d.doSomething } defined module Draw

scala> val ball = new Drawable{def doSomething = println("doing ball")} ball: java.lang.Object with Drawable = $anon$1@3a4ba4d6

scala> import Draw._ import Draw._

scala> draw ball :11: error: missing arguments for method draw in object Draw; follow this method with `_' if you want to treat it as a partially applied function draw ball ^

scala> draw(ball) doing ball

Однако, определив Draw как класс, это сработало:


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

scala> class Draw {
def draw(d:Drawable) = d.doSomething } defined class Draw

scala>

scala> val ball = new Drawable{def doSomething = println("doing ball")} ball: java.lang.Object with Drawable = $anon$1@36a06816

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

scala> d draw ball doing ball

Я не совсем уверен, почему это не работает так же способом с объектом, может быть ошибка или, возможно, указанное поведение. Однако в данный момент у меня не было времени посмотреть его.

3
ответ дан 10 December 2019 в 02:43
поделиться

Вы не можете этого сделать. За исключением четырех префиксных операторов, в любой операторной нотации первая лексема представляет объект.

6
ответ дан 10 December 2019 в 02:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: