سؤال

العنوان يقول ذلك أساسا.

هل هناك طريقة لاستخدام نوع من البريد.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]

ولكن هذا سوف يعود دائما صحيح ، وذلك بفضل المحو.

لذلك يمكنك إما استخدام الانعكاس ، أو مجرد محاولة تمرير الكائن إلى طريقة تأخذ نوعا هيكليا كمعلمة - سيخطئ المترجم إذا لم يكن صالحا.

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