在编写Haskell的拼写之后回到Scala,我开始使用type关键字使我的类定义更具可读性,例如:
type RestfulParams = Map[String, String]
def canonicalize(params: RestfulParams): String = { ... }
麻烦我不像他们在哈斯克尔那样.2873084_ . 如果我尝试在类或对象之外定义类型,我会得到一个编译器 expected class or object definition
.
那么我的问题是如何在包中的多个类和对象中使用这些类型?我现在所做的事情看起来很难看:
object RestfulTypes { type RestfulParams = Map[String, String] etc }
然后在另一个类文件中:
import utils.{RestfulTypes => RT}
def get(resource: String, params: RT.RestfulParams): String = { ... }
有没有更好的方法来做到这一点 - 顺便说一句,Scala大师认为类型只能在类/对象中定义是好事还是坏事?
3 回答
您可以使用包对象并将类型声明放在那里 . 导入该包时,类型定义将可用 .
一个例子 :
请注意,包对象具有与包相同的名称,以便在没有对象前缀的情况下可用,即myType.mine如果使用其他名称命名它,例如:
导入“package”时可以使用mainType.mine访问它
欲了解更多信息:http://www.scala-lang.org/docu/files/packageobjects/packageobjects.html
package objects会为你工作吗?
来自文章:
package object scala已经有很多类型和值,所以我认为你可以为自己的类型使用相同的技术 .
在这种情况下,我不确定是什么构成了好处,但这里有两个选择:
使用特征:(Scala's Selfless Trait Pattern)
或者只是导入对象的成员,有效地使用它像一个包: