【发布时间】:2021-01-04 01:21:26
【问题描述】:
我正在阅读“Learning Scala”一书,并在第 4 章中完成了这个练习:
编写一个函数,它接受一个 3 大小的元组并返回一个 6 大小的元组,每个原始参数后跟其字符串表示形式。例如,使用 (true, 22.25, "yes") 调用函数应该返回 (true, "true", 22.5, "22.5", "yes", "yes")。
我尝试指定类型签名的最有希望的是:
def t3ToT6[Tuple3[A, B, C]](t: Tuple3[A, B, C]) = {
产生这些错误:
Exercises.scala:99: error: not found: type A
def t3ToT6[Tuple3[A, B, C]](t: Tuple3[A, B, C]) = {
^
Exercises.scala:99: error: not found: type B
def t3ToT6[Tuple3[A, B, C]](t: Tuple3[A, B, C]) = {
^
Exercises.scala:99: error: not found: type C
def t3ToT6[Tuple3[A, B, C]](t: Tuple3[A, B, C]) = {
^
意图是允许任何类型,所以我可以用A、B 或C 来表示那些?
如果我去掉类型规范而只使用Tuple3,那么它会抱怨我应该有类型参数:
Exercises.scala:99: error: type Tuple3 takes type parameters
def t3ToT6[Tuple3[A, B, C]](t: Tuple3) = {
我怀疑我已经接近了,这是某种语法问题,但尚未找到任何在函数的类型签名中指定元组的示例。
此问题描述的正确类型签名是什么?
您知道哪些我还没有找到的例子可以帮助我理解这一点?
【问题讨论】:
-
如果类型
A、B、C已经定义,def t3ToT6[Tuple3[A, B, C]](...)将起作用。要为您的方法t3ToT6指定类型参数,它应该类似于def t3ToT6[A, B, C](t: Tuple3[A, B, C]) = ???或def t3ToT6[A, B, C](t: (A, B, C)) = ???。 -
这本书可能已经涵盖了泛型,最好重新编写该部分,因为您似乎对这些仍然有些困惑。
-
@LuisMiguelMejíaSuárez 我在书中的任何地方都没有看到“通用”,所以如果他们涵盖了您所说的内容,那就是另一个名字。 oreilly.com/library/view/learning-scala/9781449368814/ix01.html
-
@CraigTreptow 然后搜索类型参数。这是一个很好的 TL;DR;但最好阅读更多:stackoverflow.com/questions/65452344/…
标签: scala generics tuples type-parameter