object ScalaTrueRing {
def rule = println("To rule them all")
}
कोड के इस टुकड़े
जावा बाइट कोड में संकलित किया जाएगा, अगर मैं इसे डिकंपाइल, तो बराबर जावा कोड इस के समान है:एक स्काला साथी ऑब्जेक्ट दो वर्गों (जावा और .NET कंपेलरों दोनों) में संकलित क्यों है?
public final class JavaTrueRing
{
public static final void rule()
{
ScalaTrueRing..MODULE$.rule();
}
}
/* */ public final class JavaTrueRing$
/* */ implements ScalaObject
/* */ {
/* */ public static final MODULE$;
/* */
/* */ static
/* */ {
/* */ new();
/* */ }
/* */
/* */ public void rule()
/* */ {
/* 11 */ Predef..MODULE$.println("To rule them all");
/* */ }
/* */
/* */ private JavaTrueRing$()
/* */ {
/* 10 */ MODULE$ = this;
/* */ }
/* */ }
यह दो वर्गों में संकलित किया गया है, और अगर मैं स्काला का उपयोग .net संकलक, यह MSIL कोड में संकलित किया जाएगा, और बराबर सी # कोड इस तरह है:
public sealed class ScalaTrueRing
{
public static void rule()
{
ScalaTrueRing$.MODULE$.rule();
}
}
[Symtab]
public sealed class ScalaTrueRing$ : ScalaObject
{
public static ScalaTrueRing$ MODULE$;
public override void rule()
{
Predef$.MODULE$.println("To rule them all");
}
private ScalaTrueRing$()
{
ScalaTrueRing$.MODULE$ = this;
}
static ScalaTrueRing$()
{
new ScalaTrueRing$();
}
}
यह भी दो वर्गों में संकलित किया है।
स्कैला कंपाइलर्स (जावा के लिए एक और .NET के लिए एक) ऐसा क्यों करता है? यह स्थिर नियम विधि में केवल println विधि क्यों नहीं कहता है?
तो, 'JavaTrueRing $' वर्ग कहां से आता है? –
@ द एलिट जेंटलमैन इसका असली नाम स्कैलाट्रूइंग $ है, मैंने नाम बदलकर स्पष्ट रूप से दिखाया कि यह जावा कोड है। मैंने कक्षा फ़ाइल को संकुचित कर लिया और उसे मिला। – CuiPengFei