2011-10-30 8 views
7

私はScalaで遊んでいます。私が必要とするのは関数定義のブランチですが、Eclipseでは、がオブジェクトまたはクラス内になければならない.scalaファイルしか作成できません。EclipseでScalaスクリプトファイルを作成

しかし、すべての機能をラップするオブジェクトを使用していないScalaスクリプトのオンラインhereがあります。

もちろん、オブジェクトを使用してすべての関数をラップすることはできますが、必要かどうかは疑問です。ありがとう!

+3

IntelliJのオブジェクトでラップすることなくスクリプトを編集できます。 –

答えて

2

しかし、私はすべての機能をラップするオブジェクトを使用しない、ここでは、オンラインScalaのスクリプトを参照してください。

この場合、関数は他のファイルから呼び出すことはできません(実行時にコンパイラ生成名でobjectにラップされています)。関数定義のブランチが必要な場合、これはあなたが望むものではない可能性があります:) AFAIK、Scala IDEは現時点ではスクリプトファイルをサポートしていませんが、機能リクエストhereを記録できます。

1

私の知る限り、スコープの外に完全に関数や変数を書くことはできません。それは、であり、クラス/オブジェクト定義の外でそれらを書くことが可能であると言いました。あなたはpackage objectにそれらをラップするだけです。何が起きているのは、基本的に、関数/変数を与えられたクラスやオブジェクトに結びつけるのではなく、パッケージに結びつけるということです。例:

package test 
package object inside { 
    def hello = println("Hello from outer space!") 
    class Foo { 
    hello // call the function from the package 
    } 
} 

ここで、Fooを構築するときに、「Hello from outer space!」と表示されるはずです。

私が言っていることを完全に知らなくても、スクリプトが何らかの環境で実行されているため、上記のスクリプトバージョンが動作すると想像することができます。だから、あるクラスがスクリプトをロードした後、それをオブジェクトにラップして実行することを想像してください。これは、上記のような状況を暗示します。機能はまだどこかに属しています。

+0

スカラは、クラス、オブジェクト、またはパッケージオブジェクトを必要とせずに、スクリプトスタイルをサポートしています。 –

2

はい、Eclipseではオブジェクトやクラスのすべてをラップする必要があります。

オブジェクトにコードをラップし、Shebangを避ける限り、EclipseでScalaスクリプトを編集できます。 scala -i scriptName.scala -e "Main.main(args)"でスクリプトを実行してください(あなたのpathにscalaディストリビューションの "bin"フォルダがあれば)。

foo.scala:

object Main extends App { 
    println ("foo") 
} 

それを実行するには:

scala -i foo.scala -e "Main.main(args)" 
関連する問題