簡體   English   中英

要求半群在 Scala 中是可結合的

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM