gpt4 book ai didi

scala - scala.util.Random.shuffle 的类型是什么?

转载 作者:行者123 更新时间:2023-12-02 01:46:21 25 4
gpt4 key购买 nike

背景

我从一个做两件事的 Shuffler 类开始:

  1. 打乱 n:Int 索引
  2. 将它们放入 n_tranches:Int

我正在尝试重构这段代码,以便几乎整个实现都在 Trancheur 中,它将索引放入 n_tranches。

例如,我可能想将 50 张卡片分成 6 叠,我称之为 tranches。

原始代码

class Shuffler( n:Int, n_tranches:Int )
{
val v = scala.util.Random.shuffle( (0 to n-1).toVector )
// returns tranche[0,n_tranches-1] which we live in
def tranche( i:Int ) = idxs(i).map( v ).sorted.toVector

private val idxs = cut( 0 to (n-1), n_tranches ).toVector
private def cut[A](xs: Seq[A], n: Int) = {
val (quot, rem) = (xs.size / n, xs.size % n)
val (smaller, bigger) = xs.splitAt(xs.size - rem * (quot + 1))
smaller.grouped(quot) ++ bigger.grouped(quot + 1)
}
}

新代码

class Shuffler( n:Int, n_tranches:Int )
extends Trancheur( n, n_tranches, scala.util.Random.shuffle )
{
}

class Trancheur( n:Int, n_tranches:Int, shuffler ) // WHAT SHOULD I PUT HERE?!?!?!?
{
val v = shuffler( (0 to n-1).toVector )
// returns tranche[0,n_tranches-1] which we live in
def tranche( i:Int ) = idxs(i).map( v ).sorted.toVector

private val idxs = cut( 0 to (n-1), n_tranches ).toVector
private def cut[A](xs: Seq[A], n: Int) = {
val (quot, rem) = (xs.size / n, xs.size % n)
val (smaller, bigger) = xs.splitAt(xs.size - rem * (quot + 1))
smaller.grouped(quot) ++ bigger.grouped(quot + 1)
}
}

问题

我希望 Shuffler 使用仿函数 scala.util.Random.shuffle 调用 Trancheur。我觉得通话没问题。

但默认情况下,我希望 Trancheur 有一个不执行任何操作的恒等仿函数:它只返回与以前相同的结果。我在构造函数签名以及将什么定义为恒等仿函数方面遇到了问题。

注意:如果我在将 scala.util.Random.shuffle 称为仿函数时使用了错误的术语,我提前道歉 - 这就是我们在 C++ 中的称呼。不确定 Functor 在 Scala 中是否有其他含义。

最佳答案

shuffle 是一个函数。所以洗牌器(参数)应该期待一个功能。对于您的情况 Seq[Int] => Seq[Int] 应该足够了。 Scala 还提供了预定义的身份函数。

应该这样做:

class Trancheur( n:Int, n_tranches:Int, shuffler: Seq[Int] => Seq[Int] = identity)

关于scala - scala.util.Random.shuffle 的类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25501922/

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