Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Scala中使用包?_Scala - Fatal编程技术网

在Scala中使用包?

在Scala中使用包?,scala,Scala,我有一个使用akka的scala项目。我希望执行上下文在整个项目中都可用。我创建了一个包对象,如下所示: import akka.actor.ActorSystem import akka.stream.ActorMaterializer import com.datastax.driver.core.Cluster package object connector { implicit val system = ActorSystem() implicit val mat = Ac

我有一个使用akka的scala项目。我希望执行上下文在整个项目中都可用。我创建了一个包对象,如下所示:

import akka.actor.ActorSystem
import akka.stream.ActorMaterializer
import com.datastax.driver.core.Cluster

package object connector {

  implicit val system = ActorSystem()
  implicit val mat = ActorMaterializer()

  implicit val executionContext = executionContext

    implicit val session = Cluster
    .builder
      .addContactPoints("localhost")
      .withPort(9042)
      .build()
      .connect()


}
在同一个包中,我有以下文件:

import akka.stream.alpakka.cassandra.scaladsl.CassandraSource
import akka.stream.scaladsl.Sink
import com.datastax.driver.core.{Row, Session, SimpleStatement}

import scala.collection.immutable
import scala.concurrent.Future

object CassandraService {

    def selectFromCassandra()() = {

      val statement = new SimpleStatement(s"SELECT * FROM animals.alpakka").setFetchSize(20)
      val rows: Future[immutable.Seq[Row]] = CassandraSource(statement).runWith(Sink.seq)

      rows.map{item =>
       print(item)

      }
    }
}

然而,我得到的编译器错误,没有执行上下文或会话可以找到。我对package关键字的理解是,该对象中的所有内容都将在整个包中可用。但这似乎不起作用。如果能向我解释一下,我将不胜感激

您的实现必须是这样的,希望能有所帮助

package.scala

package com.app.akka

package object connector {
  // Do some codes here..
}
package com.app.akka
import com.app.akka.connector._

object CassandraService {
  def selectFromCassandra() = {
    // Do some codes here..
  }
}
CassandraService.scala

package com.app.akka

package object connector {
  // Do some codes here..
}
package com.app.akka
import com.app.akka.connector._

object CassandraService {
  def selectFromCassandra() = {
    // Do some codes here..
  }
}

您的实现必须是这样的,希望它能有所帮助

package.scala

package com.app.akka

package object connector {
  // Do some codes here..
}
package com.app.akka
import com.app.akka.connector._

object CassandraService {
  def selectFromCassandra() = {
    // Do some codes here..
  }
}
CassandraService.scala

package com.app.akka

package object connector {
  // Do some codes here..
}
package com.app.akka
import com.app.akka.connector._

object CassandraService {
  def selectFromCassandra() = {
    // Do some codes here..
  }
}

您当前的代码有两个问题

  • 编译包对象连接器时,会抛出以下错误

    错误:(14,35)递归值executionContext需要类型 隐式val executionContext=executionContext 问题在于隐式val executionContext=executionContext行 此问题的解决方案如下所示

    隐式val executionContext=executionContext

  • 当我们编译CassandraService时,它会抛出如下错误

    错误:(17,13)找不到隐式ExecutionContext。你可以通过 方法的(隐式ec:ExecutionContext)参数 或导入scala.concurrent.ExecutionContext.Implicits.global。 rows.map{item=>

  • 错误明确指出,要么我们需要将ExecutionContext作为隐式参数传递,要么导入scala.concurrent.ExecutionContext.Implicits.global。在我的系统中,这两个问题都得到了解决,并且编译成功。我附上了代码供您参考

    package com.apache.scala
    
    import akka.actor.ActorSystem
    import akka.stream.ActorMaterializer
    import com.datastax.driver.core.Cluster
    import scala.concurrent.ExecutionContext
    
    
    package object connector {
    
      implicit val system = ActorSystem()
      implicit val mat = ActorMaterializer()
    
      implicit val executionContext = ExecutionContext
    
      implicit val session = Cluster
        .builder
        .addContactPoints("localhost")
        .withPort(9042)
        .build()
        .connect()
    
    }
    
    package com.apache.scala.connector
    
    import akka.stream.alpakka.cassandra.scaladsl.CassandraSource
    import akka.stream.scaladsl.Sink
    import com.datastax.driver.core.{Row, SimpleStatement}
    
    import scala.collection.immutable
    import scala.concurrent.ExecutionContext.Implicits.global
    import scala.concurrent.Future
    
    object CassandraService {
    
      def selectFromCassandra() = {
    
        val statement = new SimpleStatement(s"SELECT * FROM animals.alpakka").setFetchSize(20)
        val rows: Future[immutable.Seq[Row]] = CassandraSource(statement).runWith(Sink.seq)
    
        rows.map{item =>
          print(item)
    
        }
      }
    
    }
    

    您当前的代码有两个问题

  • 编译包对象连接器时,会抛出以下错误

    错误:(14,35)递归值executionContext需要类型 隐式val executionContext=executionContext 问题在于隐式val executionContext=executionContext行 此问题的解决方案如下所示

    隐式val executionContext=executionContext

  • 当我们编译CassandraService时,它会抛出如下错误

    错误:(17,13)找不到隐式ExecutionContext。您可能会通过 方法的(隐式ec:ExecutionContext)参数 或导入scala.concurrent.ExecutionContext.Implicits.global。 rows.map{item=>

  • 错误明确指出,要么我们需要将ExecutionContext作为隐式参数传递,要么导入scala.concurrent.ExecutionContext.Implicits.global。在我的系统中,这两个问题都得到了解决,并且编译成功。我附上了代码供您参考

    package com.apache.scala
    
    import akka.actor.ActorSystem
    import akka.stream.ActorMaterializer
    import com.datastax.driver.core.Cluster
    import scala.concurrent.ExecutionContext
    
    
    package object connector {
    
      implicit val system = ActorSystem()
      implicit val mat = ActorMaterializer()
    
      implicit val executionContext = ExecutionContext
    
      implicit val session = Cluster
        .builder
        .addContactPoints("localhost")
        .withPort(9042)
        .build()
        .connect()
    
    }
    
    package com.apache.scala.connector
    
    import akka.stream.alpakka.cassandra.scaladsl.CassandraSource
    import akka.stream.scaladsl.Sink
    import com.datastax.driver.core.{Row, SimpleStatement}
    
    import scala.collection.immutable
    import scala.concurrent.ExecutionContext.Implicits.global
    import scala.concurrent.Future
    
    object CassandraService {
    
      def selectFromCassandra() = {
    
        val statement = new SimpleStatement(s"SELECT * FROM animals.alpakka").setFetchSize(20)
        val rows: Future[immutable.Seq[Row]] = CassandraSource(statement).runWith(Sink.seq)
    
        rows.map{item =>
          print(item)
    
        }
      }
    
    }
    

    您的文件是否包含
    声明?您的文件是否包含
    声明?