[英]Require semigroup to be associative in scala
半群必須是結合的,但我可以定義一個Semigroup
如:
trait Semigroup[T] {
def op(t1:T, t2:T) : T
}
def plus = new Semigroup[Int] { def op(t1:Int, t2:Int) = t1 - t2 }
我能夠實現不是關聯的plus
,但該類仍然是Semigroup
。 是否有針對這種情況的保護措施,或者用戶是否希望依靠測試來防止這種情況發生?
不會有編譯異常,即關聯屬性不成立。 換句話說,由您來確保它正確實施。
但是,如果您使用貓,則可以使用定律來確保貓中定義的半群和其他結構所需的所有屬性。 查看文檔。 您可以創建一個測試來檢查您定義的半群是否正常:
class TreeLawTests extends AnyFunSuite with Discipline {
checkAll("YourSemigroup[YourType].SemigroupLaws", SemigroupTests[YourSemigroup[YourType]].semigroup)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.