Scala:如何返回类型

时间:2016-06-15 12:48:22

标签: scala

我在一个类中定义了一个类型,如下所示:

type attributes = (Double, Date, Date)

现在我想在另一个类中使用该类型。是否可以通过某种方法返回此类型?

编辑:我希望使用此类型来定义其他类中方法的参数和输出。我想在一个类中定义这种类型,这样如果我想改变类型,我就很灵活。

我刚发现的一种可能性是使用特征来定义类型:

trait Attributes {
val time: Double
val departure: Date
val arrival: Date
}

例如,我可以在以后在另一个类中定义方法时使用该类型:

def log(attributes: Attributes): Unit = {
...
}

这是我以后想要使用该类型的方式。然而,为此创造一个特征似乎不是一个很好的解决方案,因为特性永远不会被扩展;它只是定义了一种类型。我希望在类中定义类型,然后在另一个类中使用该定义。例如:

def log(attributes: SomeClass.Attributes): Unit = {
...
}

4 个答案:

答案 0 :(得分:2)

语法是这样的:

class Example {
  type attributes = (Double, Date, Date)
}

class AnotherClass {
  def method(attrs: Example#attributes) = ???
}

您也可以导入类型,例如:

object Example {  // changed this to an object instead of a class
  type attributes = (Double, Date, Date)
}

class AnotherClass {
  import Example.attributes

  def method(attrs: attributes) = ???
}

答案 1 :(得分:0)

是的,您可以通过明确提及类型

来实现
type attributes = (Double, String)

def myFunc(a: attributes): attributes = a

myFunc((12.67, "Test" ))

结果:

defined type alias attributes
myFunc: (a: (Double, String))(Double, String)
res0: (Double, String) = (12.67,Test)

答案 2 :(得分:0)

  

我希望使用此类型来定义其他类中方法的参数和输出。我想在一个类中定义这种类型,这样如果我想改变类型我就很灵活......但是,创建一个特性似乎不是一个很好的解决方案作为特性永远不会延长;它只是定义了一种类型。

这是(部分)案例类的用途:case class Attributes(time: Double, departure: Date, arrival: Date)。与type不同,您可以在顶级而不是在类内定义它。如果你想将它与一个类相关联,我建议将它放入伴随对象中:

class SomeClass { ... }
object SomeClass {
  case class Attributes(time: Double, departure: Date, arrival: Date)
}

答案 3 :(得分:-1)

将类型定义放入对象中:

object SomeClass {
  type attributes = ...
}

class SomeClass {
  ...
}

def log(attributes: SomeClass.Attributes): Unit = {
  ...
}