"عرض اشتقاق هاسكل" في F#؟
-
21-09-2019 - |
سؤال
في Haskell ، من السهل إنشاء نوع جبري/اتحاد تمييز "قابل للشفاء" كسلسلة عن طريق إضافة ببساطة deriving Show
إلى تعريف النوع.
في F# انتهى بي الأمر إلى كتابة أشياء مثل:
type Pos =
| Pos of int * int
override this.ToString() =
match this with
Pos(startp, endp) -> sprintf "Pos(%d, %d)" startp endp
ومن الواضح أن الأمر يزداد سوءًا مع أنواع أكثر تعقيدًا.
أي طريقة للحصول على شيء مثل deriving Show
في F#؟
المحلول
وظائف الطباعة F# مثل printf
يمكن تنسيق أي نوع بيانات بشكل معقول إذا كنت تستخدم %A
محدد التنسيق (يستخدمون ToString
إذا حددت %O
). يمكنك تنفيذ ToString
استخدام sprintf
الذي يعيد السلسلة المنسقة:
type Pos =
| Pos of int * int
override x.ToString() = sprintf "%A" x
هذا يطبع على سبيل المثال "POS (1 ، 2)" وهو يعمل لمعظم أنواع F# (القوائم ، النقابات ، السجلات ، tuples). إنه أطول قليلاً من مجرد الإضافة deriving Show
لكن على الأقل ليس عليك تنفيذ الطباعة بنفسك.
لا تنتمي إلى StackOverflow