sách gpt4 ai đã đi

与子类型一起使用的 Scala View 边界?

In lại 作者:行者123 更新时间:2023-12-03 17:58:11 25 4
mua khóa gpt4 Nike

Scala 中是否有类似 View 绑定(bind)但可以匹配子类型的东西?

由于 Scala 中的 View 没有链接,我目前有以下内容:

implicit def pimpIterable[A, I[_]](x: I[A])(implicit f: I[A] => Iterable[A]) =
new { def mylength = x.size }

让我写:
Array(1,2,3).mylength
Seq(1,2,3).mylength

上面的表格似乎是必要的,因为如果我尝试使用以下内容简化我的函数签名:
implicit def pimpIterable[A, I <% Iterable[A]](x: I) =
new { def mylength = x.size }

那么隐式转换将不适用于数组,因为没有从 Array 到 Iterable 的直接 View (仅到 Iterable 的子类,第一种形式能够找到)。

这也迫使所有其他短手也以长形式写出。可能是什么:
implicit def pimpIterable[A: Scalar, I <% Iterable[A]](x: I) = ...

现在必须写成:
implicit def pimpIterable[A, I[_]](x: I[A])(implicit f: I[A] => Iterable[A], m: Scalar[A]) = ...

有没有更好的办法?

1 Câu trả lời

View 绑定(bind)签名存在两个问题。一、IterableKHÔNG chiều dài , 仅 kích cỡ .接下来,I不是类型构造函数。因此,修复两者,签名是:

implicit def pimpIterable[A, I <% Iterable[A]](x: I) = new { def mylength = x.size }

这是正确的。如果参数化 I ,它将排除 BitSet 等类型和 Sợi dây .

关于与子类型一起使用的 Scala View 边界?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7829765/

25 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com