ما هو ما يعادله في F # من الكلمة الافتراضية C #؟
سؤال
أنا أبحث عن ما يعادل C # default
الكلمة الأساسية، على سبيل المثال:
public T GetNext()
{
T temp = default(T);
...
شكرًا
المحلول
لقد وجدت هذا في مدونة: "كيف يبدو رمز C # هذا في F #؟ (الجزء الأول: التعبيرات والبيانات)"
C # لديه مشغل يسمى "الافتراضي" الذي يرجع قيمة التهيئة الصفرية لنوع معين:
default(int)
لديها فائدة محدودة؛ الأكثر شيوعا قد تستخدم الافتراضي (T) في عام. F # لديه بناء مماثل كدالة مكتبة:
Unchecked.defaultof<int>
نصائح أخرى
من الناحية الفنية وظيفة F # Unchecked.defaultof<'a>
هو ما يعادل default
المشغل في ج #. ومع ذلك، أعتقد أنه يستحق أن defaultof
يعتبر غير آمن شيء في F # وينبغي استخدامه فقط عندما يكون ذلك ضروريا حقا (تماما مثل استخدام null
, والذي يشجع أيضا في F #).
في معظم الوضع، يمكنك تجنب الحاجة إلى defaultof
باستخدام option<'a>
يكتب. يسمح لك بتمثيل حقيقة أن القيمة غير متوفرة بعد.
ومع ذلك، إليك مثال موجز لإظهار الفكرة. رمز C # التالي:
T temp = default(T);
// Code that may call: temp = foo()
if (temp == default(T)) temp = bar(arg)
return temp;
ربما تكون مكتوبة مثل هذا في F # (باستخدام ميزات حتمية):
let temp = ref None
// Code that may call: temp := Some(foo())
match !temp with
| None -> bar(arg)
| Some(temp) -> temp
بالطبع هذا يعتمد على سيناريو الخاص بك وفي بعض الحالات defaultof
هو الشيء الوحيد الذي يمكنك القيام به. ومع ذلك، أردت فقط أن أشير إلى ذلك defaultof
يستخدم أقل تواترا في F #.