سكالا:تتبع implicits اختيار رمز آخر السحر
-
10-07-2019 - |
سؤال
عند محاولة معرفة كيفية مكتبة الأعمال ، الضمني التحويلات مربكة.على سبيل المثال ، يبحث في تعبير مثل 'فال فو:فو = 1' ، ما يحول من 1 إلى فو?
هل من الممكن أن يكلف سكالا مكتبة (أو REPL) لطباعة رمز المسارات التي تنفذ أثناء تقييم التعبير ؟
المحلول
ويمكنك إضافة "-Xprint: من نوع" لسطر الأوامر مترجم (أو "-Ybrowse: من نوع" لمتصفح البديل GUI). لرؤية الرمز مع التحويلات تطبيقها صراحة
نصائح أخرى
كبديل طبع التحويل ، يجب على المرء أن يدرك implicits لا يمكن أن تأتي من فراغ.لديك لجعلها نطاق في بعض الطريق.البدائل هي:
- صراحة
import
البيان.احترس منimport x.y._
عندماy
هو كائن, لأن هذا هو السبيل الوحيد لجلب ضمني إلى نطاق. - الكائن رفيق الطبقة التي يتم تحويلها إلى شيء آخر.
- الكائن رفيق الهدف الدرجة ، طالما أن الهدف هو صراحة بطريقة ما (مثل في المثال الخاص بك).
لاحظ أن الكائن 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));
()
}
}
}
لا تنتمي إلى StackOverflow