معربا عن كميات وحدات على نحو جميل في سكالا

StackOverflow https://stackoverflow.com/questions/823848

  •  05-07-2019
  •  | 
  •  

سؤال

وأنا بحاجة للدعم لكميات وحدات. أود النظام نوع لفرض وحدة صحة قدر الإمكان. على سبيل المثال، فإنه لا ينبغي أن يكون من الممكن الجمع بين غرام مع دولار. انا ذاهب في الطريق من أنواع معلمات، ولكن هذا الرمز يبدو أكثر التكرار من كود سكالا رأيت من الآخرين.

abstract class UnitOfMeasure

abstract class Range[T] {
  type T <: UnitOfMeasure
}
class Quantity[T <: UnitOfMeasure](value: Double)
class DefiniteRange[T<:UnitOfMeasure](lowerBound: Quantity[T], upperBound: Quantity[T]) extends Range[T]
class Confidence(conf: Double) {
  require(0.0 <= conf && conf <= 1.0)
}
class ConfidenceInterval[T<:UnitOfMeasure](lowerBound: Quantity[T], upperBound: Quantity[T], confidence: Confidence) extends Range[T] {
    def this(lower: Quantity[T], upper: Quantity[T]) = this(lower, upper, new Confidence(.90))
}

هل هناك طريقة أنظف للقيام بذلك؟ قرع طبول. "T <: UnitOfMeasure" هو الشيء الرئيسي هو أن يزعجني

هل كانت مفيدة؟

المحلول

ولقد وجدت هذه المادة

http://www.michaelnygard.com/blog/2009/05 /units_of_measure_in_scala.html

ونأمل أن يساعد.

نصائح أخرى

وليس لدي الكتاب، ولكن ربما النفس نوع هو ما انت تحتاج. يمكنك أرفق الفصول الدراسية في فئة أخرى وإضافة تعريف نوع الخاصة بك لاستخدامها في نطاق الفئة.

ومن mdmcnlly:

<اقتباس فقرة>   

وأتذكر رؤية مثال في   البرمجة في كتاب سكالا أن dealth   مع نوع قاعدة من الحيوانات التي لديها   الغذاء متوافق، والأنواع الفرعية التي   يمكن أن تأكل فقط متوافق بهم   نوع فرعي وليس الطعام للآخرين. أنا   يشعر وكأنه يرتبط ذلك لكنني لست   بالتأكيد. ربما شخص مع الكتاب   مفيد يمكن استخلاص شذرات جيدة.   جوهر الحل هو استخدام   أعضاء نوع من الفئة الأساسية بدلا من ذلك   هذه الشروح التباين في جميع أنحاء   المكان.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top