Вызов функции Scala - PullRequest
       5

Вызов функции Scala

3 голосов
/ 10 мая 2011

Я обнаружил следующие вызовы функций в нескольких платформах, которые мне кажутся такими, как будто среда расширяет некоторые базовые классы.Некоторые примеры:

within(500 millis)

или

"Testcase description" in
  { .... }

Первый пример возвращает объект длительности с длительностью 500 миллисекунд из akka, а второй - определение тестового примера из scalatest.

Я хотел бы знать, как это поведение достигается и как оно называется.

Ответы [ 2 ]

10 голосов
/ 10 мая 2011

Это делается с помощью метода Pimp my Library .

Чтобы добавить в класс несуществующие методы, вы определяете неявный метод, который преобразует объектыэтого класса для объектов класса, который имеет метод:

class Units(i: Int) {
  def millis = i
}

implicit def toUnits(i: Int) = new Units(i)


class Specs(s: String) {
  def in(thunk: => Unit) = thunk
}

implicit def toSpecs(s: String) = new Specs(s)

См. также «Где Scala ищет Implicits?»

1 голос
/ 10 мая 2011

Если я не ошибаюсь, эти фрагменты кода можно обесценивать как

within(500.millis)

и

"Testcase description".in({ ... })

Это должно упростить понимание происходящего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...