Scala从Array [T]隐式转换为IndexedSeq [T]

Tongfei Chen

以下代码无法编译:

  implicit class indexedSeqWithBinarySearch[T](xs: IndexedSeq[T]) {
    def binarySearch(a: T) = ???
  }

  Array(0, 1, 2).binarySearch(1)

该方法binarySearch未添加到Array类中。但我想这里有一个隐式转换链Array[T] -> WrappedArray[T] -> mutable.IndexedSeq[T] -> collection.IndexedSeq[T]我该如何做Array一个IndexedSeq

埃里克·卡普伦

Array不是的子类型,IndexedSeq但您的隐式类定义必须如此。相反,您需要它采用可查看为的 任何类型IndexedSeq[T]

我在这里使用myTail一个更现实的例子:

implicit class indexedSeqWithBinarySearch[T, LS <% IndexedSeq[T]](xs: LS) {
  def myTail = {
    val xs1 = xs: IndexedSeq[T] // now the cast works
    xs1.tail
  }
}

println(Array(1, 2, 3).myTail)

强制转换的xs: IndexedSeq[T]原因是LS <% IndexedSeq[T]签名中绑定了该视图。

A <% B指定A必须以形式可见B,因此在调用站点的作用域内必须存在从A的转换B,并且此转换在方法主体中有效。


更新:没有即将弃用的视图范围,隐式类声明将类似于:

implicit class indexedSeqWithBinarySearch[T, LS](xs: LS)(implicit ls2ixseq: LS => IndexedSeq[T]) {
  ...
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从Array [T]到IndexedSeq [T]的Scala隐式转换

来自分类Dev

从IEnumerable <T>隐式转换为MyCollection

来自分类Dev

从IEnumerable <T>隐式转换为MyCollection

来自分类Dev

Scala类型推断:无法从Array [T]推断IndexedSeq [T]

来自分类Dev

从数组[T]隐式转换为Seq [T]

来自分类Dev

方法的隐式转换为Func <T,Tresult>

来自分类Dev

Scala-隐式转换为隐式参数

来自分类Dev

从uint8_t隐式转换为int时出错,但显式转换顺利时

来自分类Dev

为什么std :: unique_ptr不能隐式转换为T *和const T *?

来自分类Dev

为什么无法将ArrayList <ArrayList <T >>隐式转换为Iterable <Iterable <T >>?

来自分类Dev

无法将IEnumerable <T>的类型隐式转换为IEnumerable <T>

来自分类Dev

无法将类型“System.Collection.Generic.List<T>”隐式转换为“T”

来自分类Dev

隐式转换Option [T]到String

来自分类Dev

隐式排序[Option [T]]如何在Scala中工作?

来自分类Dev

将“ uint8_t”(从套接字读取)隐式转换为“ char”是否安全?

来自分类Dev

无法将类型MyClassContainer <T>隐式转换为MyClassContainer <MyClass>

来自分类Dev

添加从unique_ptr <T>到T *的隐式转换

来自分类Dev

为什么允许从对<int64_t,int64_t>隐式转换为对<int,int>?

来自分类Dev

没有类型T的隐式参数,试图将数据框强制转换为数据集[T]

来自分类Dev

Scala将映射隐式转换为元组

来自分类Dev

Scala隐式参数的隐式转换

来自分类Dev

在Scala中是否可以同时具有隐式Ordering [Option [T]和Ordered [Option [T]]?

来自分类Dev

Crystal如何将Array(T)转换为Array(T?)

来自分类Dev

没有将Array隐式转换为String吗?

来自分类Dev

没有将Array隐式转换为Integer(TypeError)

来自分类Dev

没有将Array隐式转换为String吗?

来自分类Dev

将NSArray转换为Swift Array <T>

来自分类Dev

无法将IQueryable <T>隐式转换为自定义类型,但其他类型可以工作

来自分类Dev

C ++-将vector <T>转换为vector <array <T >>

Related 相关文章

  1. 1

    从Array [T]到IndexedSeq [T]的Scala隐式转换

  2. 2

    从IEnumerable <T>隐式转换为MyCollection

  3. 3

    从IEnumerable <T>隐式转换为MyCollection

  4. 4

    Scala类型推断:无法从Array [T]推断IndexedSeq [T]

  5. 5

    从数组[T]隐式转换为Seq [T]

  6. 6

    方法的隐式转换为Func <T,Tresult>

  7. 7

    Scala-隐式转换为隐式参数

  8. 8

    从uint8_t隐式转换为int时出错,但显式转换顺利时

  9. 9

    为什么std :: unique_ptr不能隐式转换为T *和const T *?

  10. 10

    为什么无法将ArrayList <ArrayList <T >>隐式转换为Iterable <Iterable <T >>?

  11. 11

    无法将IEnumerable <T>的类型隐式转换为IEnumerable <T>

  12. 12

    无法将类型“System.Collection.Generic.List<T>”隐式转换为“T”

  13. 13

    隐式转换Option [T]到String

  14. 14

    隐式排序[Option [T]]如何在Scala中工作?

  15. 15

    将“ uint8_t”(从套接字读取)隐式转换为“ char”是否安全?

  16. 16

    无法将类型MyClassContainer <T>隐式转换为MyClassContainer <MyClass>

  17. 17

    添加从unique_ptr <T>到T *的隐式转换

  18. 18

    为什么允许从对<int64_t,int64_t>隐式转换为对<int,int>?

  19. 19

    没有类型T的隐式参数,试图将数据框强制转换为数据集[T]

  20. 20

    Scala将映射隐式转换为元组

  21. 21

    Scala隐式参数的隐式转换

  22. 22

    在Scala中是否可以同时具有隐式Ordering [Option [T]和Ordered [Option [T]]?

  23. 23

    Crystal如何将Array(T)转换为Array(T?)

  24. 24

    没有将Array隐式转换为String吗?

  25. 25

    没有将Array隐式转换为Integer(TypeError)

  26. 26

    没有将Array隐式转换为String吗?

  27. 27

    将NSArray转换为Swift Array <T>

  28. 28

    无法将IQueryable <T>隐式转换为自定义类型,但其他类型可以工作

  29. 29

    C ++-将vector <T>转换为vector <array <T >>

热门标签

归档