2013-03-04 3 views
4

Предположим, у меня есть класс MyList в scala со списком в качестве частного участника. Можно ли определить «()» для моего класса, чтобы вернуть ожидаемую вещь в случае положительного индекса, и начиная с конца в случае отрицательного (как и в python)?(Re) define() в scala

+0

смотри также http://jackcoughonsoftware.blogspot.ru/2009/01/deeper-look-at-apply-method-in-scala.html –

+0

отлично, спасибо. – user1377000

ответ

7

Это можно сделать с помощью метода: apply

class PythonicArray { 
    private val underlying = Array(1,2,3,4) 

    def apply(n: Int) = { 
    val i = if (n < 0) (underlying.length + n) else n 
    underlying(i) 
    } 
} 
+0

Обычно я делаю это как однострочный с точно таким же содержимым: 'def apply (n: Int) = base (if (n <0) n + basic.length else n)' –

+0

'apply' - это специальный метод имя. Он может использоваться как в объектах, так и в классах. При использовании в качестве имени метода не только используется специальное имя 'apply', но также имеется дополнительное имя специального метода unapply, используемое при извлечении частей в классе для сопоставления шаблонов и т. Д. Будьте осторожны, чтобы не злоупотреблять' apply' - вероятно, должен применяться принцип наименьшего удивления. –

Смежные вопросы