gpt4 book ai didi

scala - 不那么冗长的 breakOut 的替代方法

转载 作者:行者123 更新时间:2023-12-04 15:11:05 26 4
gpt4 key购买 nike

breakOut 很好,但太冗长了:

List(1, 2, 3).map{i => (i * 2, i / 2.0, i.toString)}(breakOut) : Array[(Int, Double, String)]

我不想指定元素类型。我想要这样的东西:
 List(1, 2, 3).map{i => (i * 2, i / 2.0, i.toString)}(build[Array])

我可以写一个 buildArray很容易,但是我需要一个 buildSet、buildList 等。所以我想要一些通用的东西。

加分 ( ;-) ) 如果您可以使其适用于 Map (使用相同的名称 build ,而不是 build2 或 buildMap)

最佳答案

这不适用于 StringMap .此代码也需要 scala.language.higherKinds :

import collection.generic.CanBuildFrom
import collection.breakOut

class Build[To[_]]

def build[To[_]] = new Build[To]

implicit def buildToCbf[From, T, To[_]](b: Build[To])
(implicit cbf: CanBuildFrom[Nothing,T,To[T]]): CanBuildFrom[From,T,To[T]] =
collection.breakOut

List(1, 2, 3).map{i => (i * 2, i / 2.0, i.toString)}(build[Array])
//res0: Array[(Int, Double, String)] = Array((2,0.5,1), (4,1.0,2), (6,1.5,3))

关于scala - 不那么冗长的 breakOut 的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24605382/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com