Другие языки программирования, которые поддерживают implicits “а-ля Scala”

Scala implicits очень мощен. Мне любопытно, если они - новая / уникальная функция Scala, или понятие уже существовало на других языках программирования.

Спасибо.

Править:

Для разъяснения моего вопроса, да, я говорю об этой конкретной реализации. При наличии "неявных вещей" все вокруг казавшегося, странного сначала, но использовавший его некоторое время и наблюдении, как другие используют его, я впечатлен тем, как хорошо это работает.

19
задан gerferra 18 June 2010 в 14:15
поделиться

6 ответов

Похоже, что источником вдохновения послужили классы типов в Haskell. По крайней мере, в одной из статей блога утверждается, что имплициты берут свое начало в классах типов Haskell; статья ссылается на статью Мартина Одерски 2006 года под названием Poor Man's Type Classes. А Дэниел Собрал написал недавнюю статью о том, как моделировать классы типов с имплицитами.

14
ответ дан 30 November 2019 в 04:33
поделиться

Если я правильно понял имплициты из http://patricklogan.blogspot.com/2007/06/scala-implicits.html, то да, есть несколько языков, которые поддерживают это.

Лучший пример - методы расширения C#. Недавний пример, где я их использовал:

Мне часто приходилось вычислять расстояние между двумя точками. У Point нет метода для вычисления расстояния до другой точки, поэтому я добавил следующий код в свой проект:

class MyPointExtension
{
  public static Double GetDistance(this Point p1, Point p2)
  {
    return /* the pythagoras code */
  }
}

Затем я мог сделать:

Point unitPosition = new Point(x,y);
Point target = new Point(x2,y2);
Double distance = unitPosition.GetDistance(target);
1
ответ дан 30 November 2019 в 04:33
поделиться

Хотя имплициты в Scala не такие мощные, как в C++ уже были операторы преобразования и конструкторы копирования, которые могли приводить к неявным преобразованиям типов. В сочетании с возможностью определять бинарные операторы (то, что Scala не позволяет) это обеспечивало некоторую мощь имплицитов Scala.

1
ответ дан 30 November 2019 в 04:33
поделиться

Это зависит от того, насколько широко вы хотите растянуть фразу "поддерживает имплициты". Одна из убедительных причин для имплицитов в Scala - это добавление методов в существующий класс (к которому у вас нет доступа). Это возможно в других языках с помощью различных конструкций: например, Smalltalk, Ruby и Objective-C поддерживают добавление методов в классы, которые вы не контролируете.

1
ответ дан 30 November 2019 в 04:33
поделиться

На сайте Princples of Programming Lanages (POPL) в 2000 году была действительно хорошая статья, в которой были представлены неявные параметры . Они реализованы на Haskell. Я уверен, что Мартин Одерски, дизайнер Scala, знал об этой работе. (Мартин - частый и желанный участник и участник POPL.)

5
ответ дан 30 November 2019 в 04:33
поделиться

Еще одна ссылка: "Type Classes as Objects and Implicits" (2010), авторы Bruno C. d. S. Oliveira, Adriaan Moors и Martin Odersky.

Через этот твит и ре-твит.

2
ответ дан 30 November 2019 в 04:33
поделиться
Другие вопросы по тегам:

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