我正在阅读Chiusano和Bjarnason的 Scala中的功能编程。
在第10章中,他们定义了Monoid
特质:
trait Monoid[A] {
def op(a1: A, a2: A): A
def zero: A
}
以下是该特征的两个实例:
1)String
Monoid:
val stringMonoid = new Monoid[String] {
def op(a1: String, a2: String) = a1 + a2
val zero = ""
}
2)List
Monoid:
def listMonoid[A] = new Monoid[List[A]] {
def op(a1: List[A], a2: List[A]) = a1 ++ a2
val zero = Nil
}
我的问题是,为什么我们在val
的情况下使用stringMonoid
,而在def
的情况下使用listMonoid
?
答案 0 :(得分:5)
<android.support.v7.widget.CardView
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_marginBottom="24dp"
android:layout_marginStart="24dp"
android:layout_marginTop="24dp"
app:cardBackgroundColor="@android:color/white"
app:cardCornerRadius="16dp"
app:cardElevation="2dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/textView10"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="TextView" />
<TextView
android:id="@+id/textView11"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/rounded.xml"
android:gravity="center_vertical|center_horizontal"
android:text="Bids"
android:textAllCaps="true"
android:textColor="@android:color/white"
android:textStyle="bold" />
</LinearLayout>
</android.support.v7.widget.CardView>
是字符串类型stringMonoid
new Monoid[String]
是通用类型listMonoid
。要传递此通用类型new Monoid[List[A]]
,必须将其声明为A
def
修改
要发表评论:
如果您仍然希望将def listMonoid[A] = new Monoid[List[A]]
用作val
,则定义其中要包含的列表。
listMonoid