سؤال

أنا أتعلم F#.لقد بدأت بالنظر إلى عينات F# من مايكروسوفت.

مررت عبر هذا البيان:

let line1,line2 = 
    use sr = System.IO.File.OpenText @"test.txt"
    let line1 = sr.ReadLine() 
    let line2 = sr.ReadLine() 
    (line1,line2)

هل يمكن لأحد أن يشرح لي هذا البيان؟

ما هو النوع الذي يتم تعريفه هنا؟وظيفة؟صفصاف؟

لماذ ا line1 و line2 يجب إعادة تعريفها ضمن تعريف line1,line2 (let line1 = ... let line2 =)?

ما هو مع السطر الأخير ، (line1, line2) وكيف يرتبط هذا بنوع التعريف الأصلي؟هل هذه هي وظيفة العودة؟

هل "البيان" هو الكلمة الصحيحة التي يجب استخدامها للتعريف في F#؟

شكرًا.

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

المحلول

النموذج العام لقيم معرف الربط في F# هو

let pattern = expression

في هذه الحالة، نمط هو "line1، line2"، وهو مترابطة بيانية نمط، فإنه يتوقع الارتباط بصفين من القيم وتعيين الأسماء "line1" و"line2" لهاتين القيمتين.

ال تعبير هي الأسطر الأربعة التالية.يوجد داخل هذا التعبير متغيرات محلية.لقد تمت تسميتهم أيضًا باسم "line1" و"line2"، ولكن كان من الممكن إعادة تسميتهم بسهولة بـ "x" و"y" أو أي شيء آخر - نطاق هذه المعرفات محلي لهذا التعبير ذي المسافة البادئة.(حقيقة أن نفس الأسماء تستخدم كأسماء في النطاق الخارجي ليس لها أي تأثير فيما يتعلق بالمترجم.)

السطر الأخير إذا كان التعبير هو "القيمة المرجعة" للتعبير.في هذه الحالة، تقوم بإرجاع صفين من القيم "line1" و"line2" (أو "x" و"y" إذا قمت بإعادة تسميتهما لتوضيح العرض).بالمناسبة، نظرًا لأن كل من هاتين القيمتين تحتوي على نوع "سلسلة"، فإن نوع تعبير الإرجاع هو "سلسلة * سلسلة"، وهو عبارة عن صفين حيث كل قيمة عبارة عن سلسلة.وهذا يعني أن الأسماء الأصلية "line1" و"line2" في السطر الأول سيتم استنتاجها من النوع "string".

F# وظيفية، وبالتالي "كل شيء عبارة عن تعبير" و"لا توجد عبارات" (فقط تسلسلات من التعبيرات يتم تقييمها بشكل تسلسلي)، ولكن لا بأس من استخدام IMO لـ (ab) مصطلح "بيان" لوصف خطوط "السماح" الداخلية، إلا إذا كنت تحاول أن تكون دقيقًا للغاية.

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