在Scala中,当另一个(远程)actor终止时,可以通过设置trapExit标志并使用第二个actor作为参数调用link()方法来通知actor.在这种情况下,当远程actor通过调用exit()结束其作业时,通过接收Exit消息来通知第一个.
但是当远程actor以不太优雅的方式终止时(例如运行崩溃的VM)会发生什么?换句话说,本地演员如何发现远程演员不再可用?当然我更希望(如果可能的话)可以通过类似于Exit 1的消息通知本地actor,但似乎不可行.我错过了什么吗?我是否应该不断轮询远程参与者的状态(在这种情况下我不知道哪种方式最好)或者是否有更智能的解决方案?
您好我是Scala的新手,我没有弄清楚如何在第二个演员中存储演员引用,以便稍后发送消息.在我的代码中,我尝试向一个actor发送测试消息.当它收到此消息时,它应该将引用(OutputChannel)存储到第二个actor,稍后应该能够向第二个actor发送消息.我不想使用reply(),因为我只需要在调用响应时才需要发送消息.这是代码.谢谢你的帮助!
import scala.actors.Actor
import scala.actors.Actor._
import scala.collection.mutable.ArrayBuffer
import scala.actors.OutputChannel
object testactors {
case object TestMessage
case object Respond
class TestActor(name: String) extends Actor {
private var source : ArrayBuffer[OutputChannel[Any]] = new ArrayBuffer
def act() {
loop {
react{
case TestMessage =>
println("i received a TestMessage " + name)
source += sender
case Respond =>
println("i received a ResponseMessage " + name)
}
}
}
def sendMessage(dest: Actor) = dest ! TestMessage
def respond = {
println("responding... " + name)
source(0) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用电梯网框架建立一个scala sbt项目.我正在使用
(我知道最近的版本).我按照http://d.hatena.ne.jp/k4200/20110711/1310354698和https://github.com/siasia/xsbt-web-plugin/blob/master/README.md获取以下sbt配置文件:
项目/ build.properties
sbt.version=0.10.1
项目/插件/ build.sbt
resolvers += "Web plugin repo" at "http://siasia.github.com/maven2"
libraryDependencies <+= sbtVersion(v => "com.github.siasia" % "xsbt-web-plugin_2.8.1" % ("0.1.1-"+v))
Run Code Online (Sandbox Code Playgroud)
项目/ Build.scala
import sbt._
import Keys._
object BuildSettings {
val buildOrganization = "xbaz"
val buildScalaVersion = "2.9.0-1"
val buildVersion = "0.0.1"
val buildSettings = Defaults.defaultSettings ++ Seq (
organization := buildOrganization,
scalaVersion := buildScalaVersion,
version := buildVersion)
}
object Resolvers {
val webPluginRepo = "Web …Run Code Online (Sandbox Code Playgroud) scalatra是否在幕后使用抑扬(或反之亦然)?它们之间的主要区别是什么,你会使用哪一个?
这两个框架都受到Sinatra的启发,并且外观相同.
使用scalatra请求路由:
class ScalatraExample extends ScalatraServlet {
get("/date/:year/:month/:day") {
<ul>
<li>Year: {params("year")}</li>
<li>Month: {params("month")}</li>
<li>Day: {params("day")}</li>
</ul>
}
Run Code Online (Sandbox Code Playgroud)
circumflex中的示例代码:
class Main extends RequestRouter {
get("/posts/:id") = "Post #" + uri("id")
}
}
Run Code Online (Sandbox Code Playgroud) Scala中以下Java代码的等价物是什么:
import java.util.Random;
public class Bool {
private boolean door;
Random random = new Random();
Bool() {
this.door = random.nextBoolean();
}
}
Run Code Online (Sandbox Code Playgroud)
因此,当创建新的Bool对象时,门变量将自动获得随机布尔值.
Scala新手在这里,我刚刚下载了Eclipse 3.6.2和Scala IDE 2.0.0-beta4(使用Scala 2.9.0.final).我创建了一个新的Scala项目来尝试分隔的延续:
package delimCCTests
import scala.util.continuations._
object Test extends App {
val result = reset {
1 + shift { k: (Int => Int) => k(k(5)) } + 1
}
println(result)
}
Run Code Online (Sandbox Code Playgroud)
编译好了,然后单击Run as - > Scala应用程序并获得此异常:
Exception in thread "main" java.lang.NoSuchMethodError: scala.util.continuations.package$.shift(Lscala/Function1;)Ljava/lang/Object;
at delimCCTests.Test$$anonfun$1.apply$mcI$sp(DelimCCTests.scala:7)
at delimCCTests.Test$$anonfun$1.apply(DelimCCTests.scala:7)
at delimCCTests.Test$$anonfun$1.apply(DelimCCTests.scala:7)
at scala.util.continuations.package$.reset(package.scala:20)
at delimCCTests.Test$delayedInit$body.apply(DelimCCTests.scala:6)
at scala.Function0$class.apply$mcV$sp(Function0.scala:34)
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
at scala.App$$anonfun$main$1.apply(App.scala:60)
at scala.App$$anonfun$main$1.apply(App.scala:60)
at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59)
at scala.collection.immutable.List.foreach(List.scala:45)
at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:30)
at scala.App$class.main(App.scala:60)
at delimCCTests.Test$.main(DelimCCTests.scala:5)
at delimCCTests.Test.main(DelimCCTests.scala)
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我错过了一些配置吗?
BTW我以为编译器推断了延续的类型?本文 …
我正在尝试用sbt设置scala web项目.我有以下设置.
项目/ plugins.sbt
libraryDependencies <+= sbtVersion(v => "com.github.siasia" %% "xsbt-web-plugin" % (v+"-0.2.1"))
Run Code Online (Sandbox Code Playgroud)
项目/ TaskTrackerBuild.scala
import sbt._
import com.github.siasia._
import WebPlugin._
import PluginKeys._
import Keys._
/**
* Main sbt build file for the task-tracker project.
*
*/
object TicketingCoreProject extends Build {
val ticketingVersion = "1.0.0-SNAPSHOT"
val Organization = "org.sansoft"
val ScalaVersion = "2.9.0-1"
val jodaTime = "joda-time" % "joda-time" % "1.6"
val scalaTime = "org.scala-tools.time" % "time_2.8.0" % "0.2"
val casbah = "com.mongodb.casbah" % …Run Code Online (Sandbox Code Playgroud) 假设我在.java文件中定义了A类,在.scala文件中定义了B类.
类A使用类B和类B使用类A.
如果我使用java编译器,我将有编译错误,因为类B尚未编译.如果我使用scala编译器,则不会找到类A. 有没有可以一起编译的编译器?
我在很多文档中都看到过Mnesia已经被爱立信开源了,但直截了当的谷歌搜索并没有帮助我找到代码库...
Mnesia仍然是开源的吗?
如何在Eclipse中为Scala/Lift项目设置hotdeploy?
基本上,我希望能够
http://wiki.liftweb.net/index.php/Using_eclipse_hotdeploy上的教程已过时,我真的无法弄清楚如何设置它.
我现在有
我应该使用任何其他版本或插件吗?
我有一个Java方法接受类型的参数Map<Long, Foo>.我试图在Scala 2.8.1中为该方法编写单元测试并传入一个文字Map[Long, Foo].
我的代码看起来像这样:
import collection.JavaConversions._
x.javaMethod(asJavaMap(Map(1L -> new Foo, 2L -> new Foo)))
Run Code Online (Sandbox Code Playgroud)
编译器给我以下错误:
error: type mismatch;
found : scala.collection.immutable.Map[scala.Long,Foo]
required: scala.collection.Map[java.lang.Long,Foo]
Run Code Online (Sandbox Code Playgroud)
我也试过了
import collection.JavaConverters._
x.javaMethod(Map(1L -> new Foo, 2L -> new Foo))
Run Code Online (Sandbox Code Playgroud)
和
import collection.JavaConversions._
x.javaMethod(Map(1L -> new Foo, 2L -> new Foo))
Run Code Online (Sandbox Code Playgroud)
并得到错误:
error: type mismatch;
found : scala.collection.immutable.Map[scala.Long,Foo]
required: java.util.Map[java.lang.Long,Foo]
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?