我在一个类中定义了一个类型,如下所示:
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 = {
...
}
答案 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 = {
...
}