gpt4 book ai didi

Scala - 在模式匹配中指定匹配项

转载 作者:行者123 更新时间:2023-12-04 04:48:30 24 4
gpt4 key购买 nike

我有以下代码:

class Animal(hair: Option[Hair])

class Cat(var hair: Option[Hair]) extends Animal(hair)
class Dog(var hair: Option[Hair]) extends Animal(hair)
class Sheep(var hair: Option[Hair]) extends Animal(hair)

//then somewhere else:

def what(animal: Animal) {

animal match {
case Cat(hair) => println("processing cat, hair=" + hair)
case Dog(hair) => println("processing dog, hair=" + hair)
case Sheep(hair) => {
println("processing sheep, cutting hair...")
hair = None
}
}
}

问题是:

1)当模式匹配与绵羊成功时,我怎样才能访问它的头发并改变它?它提示重新分配给 val,然后我放置了 var在构造函数中,但仍然...

2)我能想到的另一种方法是将整个匹配的值分配给一个变量,有没有办法将某个案例类构造函数模式匹配的值绑定(bind)到一个变量?

(我知道我可能会在 s: Sheep 之类的东西上进行模式匹配,然后调用 s.changeHairTo(None),但这是最不受欢迎的方式)。

最佳答案

您可以使用 @将整个模式绑定(bind)到您的版本中的变量

class Animal(hair: Option[Hair])
case class Cat(var hair: Option[Hair]) extends Animal(hair)
case class Dog(var hair: Option[Hair]) extends Animal(hair)
case class Sheep(var hair: Option[Hair]) extends Animal(hair)

def what(animal: Animal) {
animal match {
case Cat(hair) => println("processing cat, hair=" + hair)
case Dog(hair) => println("processing dog, hair=" + hair)
case s @ Sheep(hair) => {
println("processing sheep, cutting hair...")
//cut(hair)
s.hair = None
}
}
}

但您不必使用 var .这是您的代码段的更多功能版本。 what这里只返回 SheepNone Hair切割后。
trait Animal
case class Cat(hair: Option[Hair]) extends Animal
case class Dog(hair: Option[Hair]) extends Animal
case class Sheep(hair: Option[Hair]) extends Animal

def what(animal: Animal): Animal =
animal match {
case Cat(hair) => {
println("processing cat, hair=" + hair)
animal
}
case Dog(hair) => {
println("processing dog, hair=" + hair)
animal
}
case Sheep(hair) => {
println("processing sheep, cutting hair...")
//cut(hair)
Sheep(None)
}
}
}

关于Scala - 在模式匹配中指定匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9645048/

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