Scala 2.8 CanBuildFrom

Я использовал денежный тип SQL для хранения денежной стоимости. Недавно, я должен был работать со многими системами онлайн-платежей и заметил, что некоторые из них используют целые числа для хранения денежной стоимости. В моих текущих и новых проектах я начал использовать целые числа, и я довольно доволен этим решением.

27
задан Community 23 May 2017 в 12:23
поделиться

1 ответ

Обратите внимание, что второй аргумент карты является неявным аргументом. должен быть неявным в области видимости с соответствующими типами, иначе вы должны передать такой аргумент.

В вашем примере, Это должно быть Установить [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 во множественном числе, потому что сопутствующие объекты всех черт и классов унаследованы классом рассматриваемый пример может содержать соответствующие имплициты. Я не уверен, может ли сам экземпляр содержать неявное. Честно говоря, я не могу воспроизвести это прямо сейчас, поэтому я определенно совершаю здесь какую-то ошибку.

Во всяком случае, загляните внутрь сопутствующих объектов.

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

Во всяком случае, загляните внутрь сопутствующих объектов.

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

Во всяком случае, загляните внутрь сопутствующих объектов.

29
ответ дан 28 November 2019 в 05:43
поделиться
Другие вопросы по тегам:

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