الوصول إلى الأعضاء العامين في الهياكل في التجمعات الخارجية

StackOverflow https://stackoverflow.com/questions/1368438

سؤال

أحصل على خطأ غريب عندما أستخدم F# لقراءة أ public readonly عضو في نوع الهيكل المحدد في مجموعة C#.

// C#: compile to Lib.dll
namespace Lib
{
    public class MyClass { public readonly int ReadonlyFoo; }

    public struct MyStruct
    {
        public readonly int ReadonlyFoo;
        public int WriteableFoo;
    }
}

// F#: compile to Client.exe
open Lib
let myClass = new MyClass()
printfn "MyClass.ReadonlyFoo = %x" myClass.ReadonlyFoo

let myStruct = new MyStruct()
printfn "MyStruct.WriteableFoo = %x" myStruct.WriteableFoo
printfn "MyStruct.ReadonlyFoo = %x" myStruct.ReadonlyFoo

عندما أقوم بتجميع client.exe مع f# 1.9.6.16 ، يعطي السطر الأخير الخطأ:

"The address of the variable 'copyOfStruct' may not be used at this point"

الويب بدون فائدة اعتبارا من وقت هذه الكتابة. يبدو من الغريب أن يتمكن المرء من قراءة عضو غير قابل للتغيير في الفصل ، ويمكن للمرء قراءة عضو قابل للتغيير في البنية ، ولكن لا يمكن للمرء قراءة عضوًا ثابتًا في البنية. حل بديل سهل بما فيه الكفاية ، لكنني فضولي: هل هذا خطأ في المترجم؟

تحرير: لقد قدمت تقرير الأخطاء إلى fsbugs@microsoft.com

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

المحلول

عادة عندما يقول الناس "يبدو وكأنه خطأ في المترجم" الذي هو رمز لـ "لا أعرف ماذا أفعل". ومع ذلك ، في هذه الحالة ، يبدو الأمر مثل الخطأ.

يقوم برنامج التحويل البرمجي F# بإجراء نسخة من الهياكل وراء الكواليس في حالة تحورها. (لهذا السبب حتى لو قمت بتحديد بنية ذات حقول قابلة للتغيير ، يجب أن تنسب مثيل هذا البنية على أنه قابل للتغيير قبل أن تتمكن من تحديث حقوله.) يبدو أن السحر الخاص الذي يدور وراء الكواليس ينسى حول حقول البنية "القراءة".

في حين أن الإنترنت و Stackoverflow مكان رائع لطلب المساعدة حول القضايا المرتبطة بـ F#، يرجى السماح لفريق F# بمعرفة أي أخطاء تجدها عن طريق إرسال بريد إلكتروني إلى fsbugs@microsoft.com.

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