繁体   English   中英

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

[英]What is the type for scala.util.Random.shuffle?

背景

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

  1. Shuffles 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调用scala.util.Random.shuffle 我觉得这个电话很好。

但作为默认值,我希望Trancheur拥有一个不执行任何操作的标识函数:它只返回与之前相同的结果。 我遇到了构造函数签名以及定义为身份函子的问题。

注意:如果我在调用scala.util.Random.shuffle函数时使用了错误的术语,我会事先道歉 - 这就是我们在C ++中所称的。 不确定Functor在Scala中是否意味着其他内容。

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

这应该这样做:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM