Должен ли я использовать Unit или не указывать тип возврата для моего метода scala? - PullRequest
50 голосов
/ 27 февраля 2012

Я не уверен, в чем разница между указанием Unit в качестве возвращаемого типа моего метода scala или отсутствием возвращаемого типа в целом. В чем разница?

Может кто-нибудь посоветовать, пожалуйста?

Ответы [ 3 ]

53 голосов
/ 27 февраля 2012

Неявный Unit тип возврата:

def f() {println("ABC")}

Явный Unit тип возврата:

def g(): Unit = {println("ABC")}

Возвращаемый тип, выведенный из последнего выражения метода, все еще Unit, потому что это тип println, но запутанный:

def h() = println("ABC")

Все вышеперечисленные методы эквивалентны. Я бы предпочел f(), потому что мне не хватает только оператора = после подписи метода. Используйте явный : Unit, если вы хотите дополнительно документировать метод. Последняя форма сбивает с толку и фактически рассматривается как предупреждение в .

Оператор = имеет решающее значение. Если он присутствует, это означает: « пожалуйста, верните то, что последний оператор возвращает » в теле метода. Очевидно, что вы не можете использовать этот синтаксис для abstract методов. Если это не так, предполагается Unit.

14 голосов
/ 27 февраля 2012

Специальный синтаксис для процедур (методы, возвращающие Unit ) был ошибкой.Не используйте это.Это сбивает с толку и опасно для начинающих с фоном Java / C (++).И это ненужное специальное лечение.Всегда используйте знак равенства, с выводом типа и без него (последний должен использоваться только для закрытых членов):

def foo(): Unit = someCodeReturningUnit()

private def bar() = someCodeReturningUnit()
6 голосов
/ 27 февраля 2012

Сообщество Scala разделено по этому поводу. С одной стороны, отсутствие использования явных типов возврата означает, что вы легко можете забыть знак =, что приводит к ошибкам, которые часто раздражают для отслеживания. С другой стороны, Unit методы возврата, имеющие другой синтаксис, помещают их в отдельную категорию, что нравится некоторым людям.

Лично я бы предпочел, чтобы этот синтаксис пропал - ошибки, возникающие из-за отсутствия = , раздражают для отслеживания. Но это даже не считается устаревшим, поэтому я предпочел бы воспользоваться этим, чем просто страдать от проблем его существования.

Так что, используйте все, что пожелаете. Люди будут критиковать ваш выбор в любом случае, и люди будут восхвалять его в любом случае.

...