Многие мои коллеги назвали Scala сложной, с ее богатым набором функций, а некоторые даже обвинили все эти новые функции. В то время как большинство программистов знают о ОО-функциях, и, по крайней мере, приличные знают и о функциональном программировании, в Scala есть одна особенность, для которой я не знаю ее исторического происхождения.
Учитывая, что главная мантра нашей профессии - не изобретать велосипед, я довольно уверен, что у Scala нет никаких реальных неслыханных возможностей, но я должен исправить это, если это необходимо.
Чтобы перейти к актуальному вопросу, хотя я знаю о происхождении большинства функций Scala, я никогда раньше не видел ничего подобного его implicit
заявлениям. Существуют ли другие (более старые!) Языки, которые также предоставляют эту функцию?
Имеет ли смысл различать различные случаи имплицитов (поскольку они могут происходить из разных источников), а именно конверсии импликов и неявные параметры?
Ответы:
Я не согласен с ответом Брайана на этот другой вопрос.
Насколько я знаю, на любом другом языке нет неявного понятия. История изменений для Scala подразумевает, что последствия были обобщением границ представления, а сама граница представления является обобщением автоматического преобразования типов, что на самом деле очень распространено.
Затем Implicits включили классы типов, но я был бы очень удивлен, если бы это было первоначальное намерение.
редактировать
В примечаниях к выпуску Scala 2.0 (2006) говорится:
Это, конечно, не означает, что неявные параметры были введены с целью замены представлений.
Однако Одерскому явно нравится, когда однажды концепция может заменить несколько. В этом смысле вполне может быть так, что Одерский хотел классы типов, но не хотел вводить механизм, который бы обрабатывал это исключительно, и, следовательно, придумал что-то еще, что позволило бы ему удалить одну концепцию (Views) и заменить ее с более общей концепцией, которая обрабатывает как представления, так и классы типов.
В случае, если кто-то заинтересован, классы типов бедняков, на которые ссылается Брайан в Stack Overflow, также датируются 2006 годом. Ясно, что Одерский был осведомлен о связи между имплицитами и классами типов, когда представил их.
Тем не менее, я поддерживаю свое требование. :-)
источник
Implicit
в Scala означает две разные вещиimplict
ключевым словом), который предшествовал первой версии Scala примерно на год.источник
Я задал похожий вопрос о переполнении стека. Наиболее проголосовали ответ и другие предполагают , что истоки находятся в Haskell.
источник