F الخطأ # مترجم FS0030، مشاكل مع تقييد القيمة
-
03-07-2019 - |
سؤال
ولقد قرأت دعاية مغالى فيها على StrangeLights أ >، لقد قرأت مرور من الخبراء F # (صفحة 119)، ولكن لا استطيع ان ارى كيفية تطبيقها على قانون بلدي:
لبلدي التجارب، أريد أن تحقق المساواة بين العوامات، مع شيء من التسامح. أنا تحويل كل شيء إلى وحدات القياس، ولكن أريد أن أكون قادرة على أن تكون 'عام':
let toleq (e:float<_>) a b = (abs ( a - b ) ) < e
وبعد ذلك يمكنني أن استخدام هذا للتحقق المساواة على 'أنواع' مختلفة من تعويم، أو الكاري هو أن تجعل من عرف واحد:
toleqm = toleq 1.0e-10<m>
ولكن أحصل على الرسالة التالية:
Type inference has inferred the signature
val toleq : float<'u> -> float<'u> -> float<'u> -> bool
Either define 'toleq' as a simple data term, make it a function, or add a
type constraint to instantiate the type parameters.
وأنا لا أرى كيف يمكنني أن أفعل أكثر من ذلك لجعلها وظيفة - لا استطيع ان ارى أية معلمات الضمنية.
وما الأمر؟
المحلول
حسنا، أنا عابث حول قليلا وجدت الحل، في اليأس، ولكن لست متأكدا من أن أفهم لماذا ...
let toleq (e:float<_>) (a:float<_>) (b:float<_>) = (abs ( a - b ) ) < e
وهتاف اشمئزاز، انها تقريبا قبيحة مثل الإعلانات العامة في C #.
لا تنتمي إلى StackOverflow