if (!(x contains y)-6ren">
gpt4 book ai didi

scala - Scala折叠在String上会导致“类型不匹配;找到:任何”

转载 作者:行者123 更新时间:2023-12-04 19:41:41 25 4
gpt4 key购买 nike

我在Scala中玩折叠,无论出于什么原因,最终都通过执行以下操作来尝试测试String是否仅包含唯一字符:

str
.fold(""){ (x, y) => if (!(x contains y)) x + y else x }
.size == str.size


这导致错误

error: type mismatch;
found: Any
required: String


显然指向 y的值。

谁能提供对此的见识?

我不会期望这种行为,对此我能找到的最接近答案是 "Scala assumes wrong type when using foldLeft,",这很相似,但并没有明确说明。

最佳答案

您应该使用foldLeft而不是fold

str
.foldLeft(""){ (x, y) => if (!(x contains y)) x + y else x }
.size == str.size


fold的签名为:

fold[A1 >: Char](z: A1)(op: (A1, A1) ⇒ A1): A1 


因此, fold期望元素类型为累加器类型的下限。对于 Char,元素类型为 String,因此 A1的可能类型为 CharAnyValAny。您传递 String,因此 Any是唯一的常见类型,这意味着 xy的类型为 Any,而没有 contains方法。

您需要将累加器类型与元素类型不同,因此需要使用 foldLeft

关于scala - Scala折叠在String上会导致“类型不匹配;找到:任何”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23461238/

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