سؤال

عند محاولة معرفة كيفية مكتبة الأعمال ، الضمني التحويلات مربكة.على سبيل المثال ، يبحث في تعبير مثل 'فال فو:فو = 1' ، ما يحول من 1 إلى فو?

هل من الممكن أن يكلف سكالا مكتبة (أو REPL) لطباعة رمز المسارات التي تنفذ أثناء تقييم التعبير ؟

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

المحلول

ويمكنك إضافة "-Xprint: من نوع" لسطر الأوامر مترجم (أو "-Ybrowse: من نوع" لمتصفح البديل GUI). لرؤية الرمز مع التحويلات تطبيقها صراحة

نصائح أخرى

كبديل طبع التحويل ، يجب على المرء أن يدرك implicits لا يمكن أن تأتي من فراغ.لديك لجعلها نطاق في بعض الطريق.البدائل هي:

  1. صراحة import البيان.احترس من import x.y._ عندما y هو كائن, لأن هذا هو السبيل الوحيد لجلب ضمني إلى نطاق.
  2. الكائن رفيق الطبقة التي يتم تحويلها إلى شيء آخر.
  3. الكائن رفيق الهدف الدرجة ، طالما أن الهدف هو صراحة بطريقة ما (مثل في المثال الخاص بك).

لاحظ أن الكائن scala.Predef هو كل ما المستوردة في نطاق افتراضيا ، وهو كيف سكالا الافتراضي implicits ندخل في نطاق.

وscalac -print يطبع التعليمات البرمجية بعد تحويل نوع الضمني حيث تطبيقها.

class A{
    val x : String = "hi" drop 1 
}

هل يؤدي الى:

package <empty> {
  class A extends java.lang.Object with ScalaObject {
    @remote def $tag(): Int = scala.ScalaObject$class.$tag(A.this);
    private[this] val x: java.lang.String = _;
    <stable> <accessor> def x(): java.lang.String = A.this.x;
    def this(): A = {
      A.super.this();
      A.this.x = scala.this.Predef.forceRandomAccessCharSeq(
        scala.this.Predef.stringWrapper("hi").drop(1));
      ()
    }
  }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top