Я изучаю Scala и играю с подходящим ассоциированным объектом unapply. Я знаю, что если имя заканчивается на «:», то оно становится правильным ассоциативным. Однако, по-видимому, существуют некоторые странные ограничения на именованиеScala right ассоциативные методы
например. Это недопустимый
object cons: { def unapply(value: String): Option[(Char, List[Char])] = ??? }
object :_cons_: { def unapply(value: String): Option[(Char, List[Char])] = ??? }
Они действительны
object cons_: { def unapply(value: String): Option[(Char, List[Char])] = ??? }
object >>: { def unapply(value: String): Option[(Char, List[Char])] = ??? }
Так что, кажется, некоторые странности о смешивании буквенно-цифровых знаков и символов в идентификаторах.
Так что, в основном, я хочу иметь описательное имя i.e. «cons» и по-прежнему иметь правую ассоциативность. Кроме того, я бы хотел, чтобы мой оператор был симметричен по эстетическим соображениям :-), поэтому мне не нравится cons_:
Есть ли способ сделать что-то связанное справа без использования двоеточия? Или любые другие предложения для достижения этого?
:_cons_:
кажется близким, но по какой-то причине идентификатор не может начинаться с «:» и имеют алфавитно-цифровые
Отлично! Я не знал об использовании обратных тиков для разрешения произвольных идентификаторов. Спасибо – ekj
Последний символ не является кадром, это двоеточие. Символы кавычек в цитированном идентификаторе больше не становятся частью идентификатора, чем символы кавычек в строковом литерале. Последний символ строки, обозначаемой строковым литералом '' Hello '', не' '', это 'o'. –
@ JörgWMittag: Ого, это было невероятное неправильное чтение с моей стороны -« исключение »прямо там В моей защите это было очень рано, и я все еще немного ожесточен [this] (http://stackoverflow.com/q/17863794/334519). Я отредактировал, чтобы убрать мое удивление, что работает подход backtick. –