كيفية استخدام أنواع الهيكلية في إسنستانسيف المكالمات?
-
27-10-2019 - |
سؤال
العنوان يقول ذلك أساسا.
هل هناك طريقة لاستخدام نوع من البريد.g. new Object {def foo = "bar"}
في isInstanceOf[<structural_type_here>]
إتصل?
المحلول
لن تعمل الأنواع الهيكلية مع isInstanceOf
.وبالمثل ، فإن مطابقة النمط للأنواع الهيكلية لا معنى لها (تتطابق دائما).
وعادة ما يتم إلقاء اللوم على هذا النوع من المحو ، ولكن حتى في غياب المحو فإنه لن يعمل ، لأن جفم لا يفهم أنواع الهيكلية.
من ناحية أخرى ، سكالا يمكن كانت ذكية بما فيه الكفاية لجعل العمل فحص نوع الهيكلية من خلال المحو.
نصائح أخرى
أود أن أقول أنه يمكنك استخدام اسم مستعار نوع:
type HasFooMethod = { def foo: String }
val v = new Object {def foo = "bar"}
v.isInstanceOf[HasFooMethod]
ولكن هذا سوف يعود دائما صحيح ، وذلك بفضل المحو.
لذلك يمكنك إما استخدام الانعكاس ، أو مجرد محاولة تمرير الكائن إلى طريقة تأخذ نوعا هيكليا كمعلمة - سيخطئ المترجم إذا لم يكن صالحا.
لا تنتمي إلى StackOverflow