Scala中的Typedef

Ale*_*mov 23 scala

如何在Scala中定义类型?喜欢

type MySparseVector = [(Int, Double)]
Run Code Online (Sandbox Code Playgroud)

在哈斯克尔或

typedef MySparseVector = std::list<std::pair(int, double)>> 
Run Code Online (Sandbox Code Playgroud)

在C++中?

我试过了

type MySparseVector = List((Int, Double))
Run Code Online (Sandbox Code Playgroud)

但无法弄清楚如何使其发挥作用.如果我在类文件的开头写这个,我得到"预期的类或对象定义"错误.

PS对不起,我输错了.我试图在Scala中使用List [(Int,Double)].

yǝs*_*ǝla 38

type MySparseVector = List[(Int, Double)]
Run Code Online (Sandbox Code Playgroud)

用法示例:

val l: MySparseVector = List((1, 1.1), (2, 2.2))
Run Code Online (Sandbox Code Playgroud)

必须在类或对象内定义类型.您可以在以后导入它们.您还可以在包对象中定义它们 - 在同一个包中不需要导入,您仍然可以将它们导入到其他包中.例:

// file: mypackage.scala
package object mypackage {
  type MySparseVector = List[(Int, Double)]
}

//in the same directory:
package mypackage
// no import required
class Something {
  val l: MySparseVector = Nil
}

// in some other directory and package:
package otherpackage
import mypackage._
class SomethingElse {
  val l: MySparseVector = Nil
}
Run Code Online (Sandbox Code Playgroud)

  • Scala中的技巧是typedef(如变量和方法定义,不能生活在顶层.它们需要位于类或对象中.通常的做法是将它们包含在对象中,然后导入对象的内容您需要typedef的位置.这使您可以控制typedef的使用位置,并防止名称冲突. (7认同)
  • 在一个类或对象中,而不是一个特征(因为我花了 5 分钟发现!) (2认同)