11

重複の可能性:
Scala ファイルをインタープリターにロードして関数を使用しますか?

次のように sbt コンソールを起動します。

alex@alex-K43U:~/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) ファイルがあります。

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

コンソールで次のようなことができるようにする方法:

scala> timesTwo

そして、関数の値を出力しますか?

4

1 に答える 1

17

:loadつまり、scala REPLの関数を使用してファイルをロードします。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

それから電話timesTwoしてTimesください:

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

関数定義だけを aclassまたはでラップせずに必要な場合は、scala REPL/sbt コンソールでobjectコマンドを使用して貼り付けることができます。: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
于 2012-12-16T09:47:34.613 に答える