Scala 我能用“我能做这个吗?”;“收益率”;在斯卡拉?(嵌套用于生成组合向量的循环)

Scala 我能用“我能做这个吗?”;“收益率”;在斯卡拉?(嵌套用于生成组合向量的循环),scala,Scala,免责声明:我对任何当代类型的编码都是相当陌生的。(高中时基本上是一个Pascal,几年前有点Python,现在我正试着自学Scala。) 这段代码应该生成一组随机的卡片,上面有我在前几行中自定义的套装和值。我有一些代码可以工作,使用可变变量,但我总是读到最好尽量避免可变变量,所以我尝试使用“yield”来代替。这是我修改代码后的结果: import util.Random.shuffle val suits = Vector[String]("s", "m", "p") val values

免责声明:我对任何当代类型的编码都是相当陌生的。(高中时基本上是一个Pascal,几年前有点Python,现在我正试着自学Scala。)

这段代码应该生成一组随机的卡片,上面有我在前几行中自定义的套装和值。我有一些代码可以工作,使用可变变量,但我总是读到最好尽量避免可变变量,所以我尝试使用“yield”来代替。这是我修改代码后的结果:

import util.Random.shuffle

val suits = Vector[String]("s", "m", "p")
val values = Vector[Int](1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 5, 5, 9)

class Card(val suit:String, val value:Int) {}
class Deck() {
    var cardsInDeck:Vector[Card] = Vector()
}

def makeDeck(suits:Vector[String], values:Vector[Int]):Vector[Card] = {
    for (i <- suits) yield {
        for (j <- values) new Card(i, j) 
    }
}

val TheDeck = new Deck
TheDeck.cardsInDeck = util.Random.shuffle(makeDeck(suits, values))
for (i <- TheDeck.cardsInDeck) {
    println(s"${i.suit}${i.value}")
}
import util.Random.shuffle
val=向量[字符串](“s”、“m”、“p”)
val值=向量[Int](1,1,1,1,1,2,2,2,3,3,5,9)
类卡(val-suit:String,val-value:Int){}
类甲板(){
var cardsInDeck:Vector[Card]=Vector()
}
def makeDeck(适合:向量[String],值:向量[Int]):向量[Card]={
对于(i
defmakedeck)(适合:Vector[String],值:Vector[Int]):Vector[Card]={
为了{

谢谢。我还没有完全弄清楚案例类的好处是什么,但我还在学习。至于这副牌是否应该是可变的,现在看来它必须是可变的,因为它会随着游戏的进行而增长和收缩。不过,这不是随之而来的吗?顺便说一句,我甚至没有想到在那里需要第二个收益率,但无论如何,我喜欢你的方式更好,更容易阅读等。牌组可以是可变的,也可以是不可变的。如果你使它不可变,那么改变牌组的每一个操作都需要创建一个新的牌组对象。有时这对于游戏和其他模拟来说很尴尬。
def makeDeck(suits: Vector[String], values: Vector[Int]): Vector[Card] = {
    for {
      i <- suits
      j <- values
    } yield new Card(i, j) 
}