2017-02-03 10 views
2

У меня есть объект под названием + с помощью метода, который называется B. Я пытаюсь вызвать этот метод следующим образом:В Scala, как мне вызвать методы для объекта с именем `+` без получения синтаксической ошибки?

object + { 
    def B() = Console.println("'Sup, world?") 
} 

object Main extends App { 
    +.B() 
} 

(Ideone ссылка: http://ideone.com/0OyKw2)

Но это дает мне ошибку синтаксиса:

Main.scala:6: error: illegal start of simple expression 
    +.B() 
     ^

Я попробовал пару различные способы вызова этого метода, такие как + .B, (+).B, `+`.B, (`+`).B и (+).B. Я еще ничего не нашел.

Могу ли я назвать этот метод каким-либо образом, или мне лучше всего использовать другое имя для объекта?

+1

Это страшная мысль, что объект с именем '+' и методы в Скале обычно начинаются со строчных, так 'b()' вместо 'B()' – nmat

+1

@Tanner Swett Есть ли причина, по которой вы хотите назвать свой класс, как оператор? Возможно, мы сможем найти более идиоматический шаблон scala для достижения желаемого эффекта оператора. – rmin

+0

@rmin Я изначально назвал класс 'AppendVect', но у меня появилось много типов, похожих на AppendVect [MyFirstType, AppendVect [MySecondType, MyThirdType]]'. Поскольку «AppendVect» - очень важный класс, я решил, что имя, подобное '+', было бы подходящим, так как тогда я мог бы написать «MyFirstType + (MySecondType + MyThirdType)». Я попробовал переименовать класс в '++' вместо этого, и это, кажется, хорошо работает. –

ответ

6

Вы, конечно, лучше от просто используя «безопасное» имя, но это работает:

$plus.B 
+2

Это зависит от конкретной кодировки конкретной версии конкретной реализации на конкретной платформе. Я бы не стал делать ставку на эту работу, например. на Scala-native или в более новой версии. –

+0

@ JörgWMittag Хорошая точка. Я думаю, мы все можем согласиться с тем, что все это плохая идея. Но любая идея, почему она работает с '++' вместо '+', а также с Scala 2.12 (оба утверждения из комментариев выше)? – Thilo