سؤال
كيف يمكن لـ F# فحص سلاسل التنسيق في وقت الترجمة لتحديد أن x يحتوي على نوع int في التعريف التالي؟
let foo x = sprintf "%d" x`?
هل هذا مشفر في اللغة أم يمكن لشخص ما أن يكتب وظيفة "my_print" الخاصة به والتي تستخدم سلاسل التنسيق ذات بناء جملة مختلف؟على سبيل المثال:
let foo x = my_print "{integer}" x
المحلول
يمكنك قراءة القليل عنها في 6.4.17 (تنسيقات 'printf') هنا, ، ولكن باختصار
- انها مدمجة في اللغة
- يمكن "إجبار" سلسلة حرفية بشكل فعال على نوع "التنسيق" الغريب
- يتوقع printf والأصدقاء وسيطة أولى من نوع التنسيق، مما يؤدي إلى حدوث الإكراه
والنتيجة النهائية هي أنه يمكنك إنشاء وظائف نمط printf الخاصة بك، ولكن يجب عليك استخدام نفس تنسيقات %s، نظرًا لأن هذه العناصر مدمجة.
نصائح أخرى
هنا مثال على كيف يمكنك بناء printf- بنفسك وظائف النمط في F #. لا يمكنك تغيير شكل المتخصصين (مثل "٪ د")، ولكن يمكنك الاستفادة من المتخصصين الحالية لبناء وظائف إضافية التنسيق سلسلة المترجم سيكتبه الاختيار.
لا تنتمي إلى StackOverflow