gpt4 book ai didi

scala - 变量绑定(bind)到 Scala 匹配表达式中 case 子句中的模式

转载 作者:行者123 更新时间:2023-12-02 09:32:43 26 4
gpt4 key购买 nike

我创建了一个对象来演示如何使用案例类:

object MatchWithPattern extends App
{
case class Person(firstName:String,lastName:String);
def whatYouGaveMe(obj:Any):String={
obj match {
case str : String => s"you gave me a String ${str}";
case person : Person(firstName,lastName) => s" You gave me a Person Object with ${person.firstName} ${person.lastName}";
case default => "You gave me a Any class Object";
}

}

var person= new Person("Mukesh", "Saini");
Console.println(whatYouGaveMe(person));
}

代码无法编译并给出错误

错误:'=>' 预期但 '(' 找到

现在我改变以下

case person : Person(firstName,lastName) => s" You gave me a Person Object with ${person.firstName} ${person.lastName}";

case person @ Person(firstName,lastName) => s" You gave me a Person Object with ${person.firstName} ${person.lastName}";

代码编译并成功运行。

现在我变了

case str : String => s"you gave me a String ${str}";

case str @ String => s"you gave me a String ${str}";

它给了我一个错误:

错误:对象 java.lang.String 不是一个值

同理

case list : List(1,_*) // gives error

case list @ List(1,_*) // run successfully

所以我的问题是我应该在哪里使用 @ 而不是 :

谢谢

最佳答案

冒号用于匹配类型@用于通过unapply方法执行递归模式匹配右边的东西。

在您的示例中,String 是一种类型,但 Person(x,y)List(1,_*) 不是.

关于scala - 变量绑定(bind)到 Scala 匹配表达式中 case 子句中的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31085742/

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