Я использовал денежный тип SQL для хранения денежной стоимости. Недавно, я должен был работать со многими системами онлайн-платежей и заметил, что некоторые из них используют целые числа для хранения денежной стоимости. В моих текущих и новых проектах я начал использовать целые числа, и я довольно доволен этим решением.
Обратите внимание, что второй аргумент карты
является неявным аргументом. должен быть неявным в области видимости с соответствующими типами, иначе вы должны передать такой аргумент.
В вашем примере, Это
должно быть Установить [String]
, B должно быть Int
, а Repr
должно быть List [String]
. Следовательно, для этого вам понадобится следующий неявный объект в области видимости:
implicit object X: CanBuildFrom[List[String], Int, Set[String]]
В области такой вещи нет. Кроме того, breakOut
не может предоставить его, потому что он сам по себе требует неявного CanBuildFrom
, первым типом которого может быть любой класс (противоположный вариант, потомок Nothing
), но в остальном ограничивается другими типами.
Взгляните, например, на фабрике CanBuildFrom
из сопутствующего объекта List
:
implicit def canBuildFrom [A] : CanBuildFrom[List, A, List[A]]
Поскольку он связывает второй и третий параметры через A
, рассматриваемый неявный
Итак, как узнать, где искать такие имплициты? Прежде всего, Scala действительно импортирует некоторые вещи во все области видимости. Прямо сейчас я могу вспомнить следующий импорт:
import scala.package._ // Package object
import scala.Predef._ // Object
// import scala.LowPriorityImplicits, class inherited by Predef
import scala.runtime._ // Package
Поскольку нас беспокоят имплициты, обратите внимание, что когда вы импортируете что-то из пакетов, единственными возможными имплицитами являются одиночные. С другой стороны, когда вы импортируете вещи из объектов (синглтонов), у вас могут быть неявные определения, значения и синглтоны.
Прямо сейчас есть имплиты CanBuildFrom
внутри Predef
и LowPriorityImplicits
, которые связаны со строками. Они позволяют нам написать карту «это строка» (_.toInt)
.
Итак, если запретить этот автоматический импорт и выполняемый вами явный импорт, где еще можно найти неявное? Одно место: сопутствующие объекты экземпляра, к которому применяется метод.
Я говорю сопутствующий объект s во множественном числе, потому что сопутствующие объекты всех черт и классов унаследованы классом рассматриваемый пример может содержать соответствующие имплициты. Я не уверен, может ли сам экземпляр содержать неявное. Честно говоря, я не могу воспроизвести это прямо сейчас, поэтому я определенно совершаю здесь какую-то ошибку.
Во всяком случае, загляните внутрь сопутствующих объектов.
и явный импорт, который вы делаете, где еще можно найти неявный? Одно место: сопутствующие объекты экземпляра, к которому применяется метод.Я говорю сопутствующий объект s во множественном числе, потому что сопутствующие объекты всех черт и классов унаследованы классом рассматриваемый пример может содержать соответствующие имплициты. Я не уверен, может ли сам экземпляр содержать неявное. Честно говоря, я не могу воспроизвести это прямо сейчас, поэтому я определенно совершаю здесь какую-то ошибку.
Во всяком случае, загляните внутрь сопутствующих объектов.
и явный импорт, который вы делаете, где еще можно найти неявный? Одно место: сопутствующие объекты экземпляра, к которому применяется метод.Я говорю сопутствующий объект s во множественном числе, потому что сопутствующие объекты всех черт и классов унаследованы классом рассматриваемый пример может содержать соответствующие имплициты. Я не уверен, может ли сам экземпляр содержать неявное. Честно говоря, я не могу воспроизвести это прямо сейчас, поэтому я определенно совершаю здесь какую-то ошибку.
Во всяком случае, загляните внутрь сопутствующих объектов.
потому что сопутствующие объекты всех признаков и классов, унаследованных классом рассматриваемого экземпляра, могут содержать соответствующие имплициты. Я не уверен, может ли сам экземпляр содержать неявное. Честно говоря, я не могу воспроизвести это прямо сейчас, поэтому я определенно совершаю здесь какую-то ошибку.Во всяком случае, загляните внутрь сопутствующих объектов.
потому что сопутствующие объекты всех признаков и классов, унаследованные классом рассматриваемого экземпляра, могут содержать соответствующие имплициты. Я не уверен, может ли сам экземпляр содержать неявное. Честно говоря, я не могу воспроизвести это прямо сейчас, поэтому я определенно совершаю здесь какую-то ошибку.Во всяком случае, загляните внутрь сопутствующих объектов.