Scala неявный выбор использования

Gnome обеспечивает превосходную библиотеку для этого, названного Бойкий , со многими полезными структурами данных и другими утилитами также.

23
задан oxbow_lakes 10 September 2009 в 12:06
поделиться

2 ответа

Я считаю, что более «явный» способ выполнения неявных преобразований намного лучше с точки зрения удобочитаемости, чем полностью прозрачный, по крайней мере, в этом примере.

На мой взгляд, использование неявных s полностью прозрачно от типа A до типа B нормально, когда вы можете всегда просматривать объект типа A может использоваться всякий раз, когда требуется объект типа B . Например, неявное преобразование String в RandomAccessSeq [Char] всегда имеет смысл - String всегда концептуально можно рассматривать как последовательность символы (например, в C строка представляет собой просто последовательность символов). Звонок на x. foreach (println) имеет смысл для all String s.

С другой стороны, более явные преобразования должны использоваться, когда объект типа A может иногда использоваться как объект типа B . В вашем примере вызов foo ("bar") не имеет смысла и вызывает ошибку. Поскольку в Scala нет проверенных исключений, вызов foo (s.toDate) явно сигнализирует о том, что могло быть сгенерировано исключение ( s может быть недействительной датой). Кроме того, foo ("bar" .toDate) явно выглядит неправильно, а вам нужно обратиться к документации, чтобы понять, почему foo ("bar") может быть неправильным.

44
ответ дан 29 November 2019 в 01:18
поделиться

Когда вы делаете неявное преобразование из X в Y (например, преобразование из String в Date выше), вы, по сути, говорите, что если бы у вас был полный контроль над записью X в первую очередь , вы бы сделали X реализацией или подклассом Y.

Если для X имеет смысл реализовать Y, добавьте преобразование. Если нет, то, возможно, это не подходит. Например, для String имеет смысл реализовать RandomAccessSeq [Char], но, возможно, для String не имеет смысла реализовывать Date (хотя String, реализующий StringDate, кажется прекрасным).

(Я немного опоздал, и Флавиу есть отличный ответ, но я хотел бы добавить комментарий о том, что я думаю о имплицитах.)

13
ответ дан 29 November 2019 в 01:18
поделиться
Другие вопросы по тегам:

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