我有一个自定义类型定义如下:Scala的类型类
type MyType = (String, String)
当我使用这种类型,我总是要经过我最讨厌的元组编号。我当然可以做以下并解压里面是什么如下:
val (str1, str2) = myType
我可以创建一个同伴对象为这种类型,有两个方法,让我第一个和元组的第二个元素?我想宁愿做以下事情:
myType.str1会给我第一个元素,myType.str2会给我第二个元素。
我有一个自定义类型定义如下:Scala的类型类
type MyType = (String, String)
当我使用这种类型,我总是要经过我最讨厌的元组编号。我当然可以做以下并解压里面是什么如下:
val (str1, str2) = myType
我可以创建一个同伴对象为这种类型,有两个方法,让我第一个和元组的第二个元素?我想宁愿做以下事情:
myType.str1会给我第一个元素,myType.str2会给我第二个元素。
如何:
scala> type MyType = (String, String)
defined type alias MyType
scala> implicit class MyPair(val t: MyType) extends AnyVal {
| def str1 = t._1
| def str2 = t._2
| }
defined class MyPair
scala> val mt: MyType = ("Hello", "World")
mt: MyType = (Hello,World)
scala> mt.str1
res0: String = Hello
scala> mt.str2
res1: String = World
矫枉过正;案例班将在这里首选。 – 2014-09-29 11:54:32
我同意Erik。这是过度工程,这是一个糟糕的设计的症状。一个案例类可以更加地道地服务于这个目的。 – 2014-09-29 13:46:07
另外,Tuple2 *是一个case类;一个用烦人的访问器。所以在这里尝试使用元组确实没有任何好处。 – 2014-09-29 14:09:11
我可以创建一个同伴对象为这种类型,有两个方法,让我第一个和元组的第二个元素?
当然,这是一个案例类。
如何只
case class MyType(str1: String, str2: String)
,而不诉诸笨拙类型别名?
你为什么不使用case类? – gwenzek 2014-09-29 11:41:20
类型别名不提供适当的静态类型安全;与案例类一起去。 – 2014-09-29 11:55:23