Note that there are some explanatory texts on larger screens.

plurals
  1. POConfusion with a simple Scala packaging example
    primarykey
    data
    text
    <p>I've been experiencing confusion over packaging classes in Scala and importing packages. Let me start with a pair of simple source files:</p> <h2>file: a/A.scala</h2> <pre><code>package a // Which of these imports should be used? They both seem to work. //import a.b._ import b._ class A { val fieldB = new B } </code></pre> <h2>file: a/b/B.scala</h2> <pre><code>package a.b class B </code></pre> <h2>usage</h2> <p>Compiling with scalac works without complaint with either of the imports above in A.scala</p> <p>Trying to load these files in the REPL works differently:</p> <pre><code>$ scala Welcome to Scala version 2.8.0.r0-b20100714201327 (Java HotSpot(TM) Server VM, Java 1.6.0_20). Type in expressions to have them evaluated. Type :help for more information. scala&gt; :l a/b/B.scala Loading a/b/B.scala... &lt;console&gt;:1: error: illegal start of definition package a.b ^ defined class B scala&gt; :l a/A.scala Loading a/A.scala... &lt;console&gt;:1: error: illegal start of definition package a ^ &lt;console&gt;:5: error: not found: value b import b._ ^ defined class A scala&gt; </code></pre> <p>So, I have a some questions:</p> <ul> <li><p>What is the correct way to do that import in <code>A.scala</code> above?</p></li> <li><p>The compiler seems to be able to figure out if an import is relative to the package we are in or if it is absolute, without the <code>_root_</code>. Is that what I'm seeing?</p></li> <li><p>Am I doing this correctly in the REPL? Why does it seem so unhappy with seeing package statements, and why does the <code>import b._</code> generate an error?</p></li> </ul> <p>Thank you</p> <p>PS I know the directory structure doesn't have to match the packaging. Doing so voluntarily is helping me to be less confused for now.</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload