2012-12-16 4 views
9

可能性の重複:
Load Scala file into interpreter to use functions?sbtコンソールにスカラーファイルを読み込む方法は?

私はこのようなSBTコンソールを起動します。

[email protected]:~/projects$ sbt console 
[info] Set current project to default-8aceda (in build file:/home/alex/projects/) 
[info] Starting scala interpreter... 
[info] 
Welcome to Scala version 2.9.2 (OpenJDK Client VM, Java 1.6.0_24). 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> 

私はtest.scala(/home/alex/projects/test.scalaを持っています)ファイルは次のようになります。

私は、コンソールでこのような何かを行うことができるようにそれを行うための方法

scala> timesTwo 

と出力関数の値は?

+3

これは重複していません。 'sbt console'は起動時にソースファイルをコンパイルするので、' Times timesTwo 7'だけが必要です。 (私はブライアンのようなタイムズオブジェクトでそれを包んだ。一致か運命?) –

+1

合意。これは複製ではありません。 sbtとscalaコンソールはこの点で異なって動作します。 – Synesso

答えて

16

要するに、スカラREPLの:load関数を使用してファイルをロードします。 sbtがオブジェクトをコンパイルしようとしてからオブジェクトまたはクラスにラップすると、ファイル内のその関数を呼び出すことができます。あなたが関数定義だけでそれを行うことができるかどうかはわかりません。

objectにラップしてsbtを正しくコンパイルしてください。

object Times{ 
    def timesTwo(i: Int): Int = { 
    println("hello world") 
    i * 2 
    } 
} 

ロードファイル:

scala> :load Times.scala 
Loading Times.scala... 
defined module Times 

次にtimesTwoTimesに呼び出す:classまたはobjectでそれをラップすることなく、

scala> Times.timesTwo(2) 
hello world 
res0: Int = 4 

は、あなただけの関数定義をしたい場合は、貼り付けることができますそれはscala REPL/sbtコンソール内のコマンド:pasteで実行されます。

scala> :paste 
// Entering paste mode (ctrl-D to finish) 

def timesTwo(i: Int): Int = { 
    println("hello world") 
    i * 2 
} 

// Exiting paste mode, now interpreting. 

timesTwo: (i: Int)Int 

これは、関数名だけで呼び出すことができます。

scala> timesTwo(2) 
hello world 
res1: Int = 4 
+0

どのディレクトリから読み込むのか、どのディレクトリから読み込むのですか? –

+1

@Mike 'scala'を実行したディレクトリ – Brian

+0

どのようにディレクトリを指定しますか?私はそれにパスを与えることはできません –

関連する問題