我有一個自定義類型定義如下: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