有人可以解释这几行MSIL吗?为什么它会将评估堆栈中的值移动到局部变量,只是立即将其移回并返回?
下面的MSIL代码加载一个参数(一个字符串),调用一个返回bool的方法,然后返回该bool值.我不明白为什么它调用stloc.0将方法的返回值存储在局部变量中,然后执行显式的无条件控制传输到下一个标记的行(似乎没必要),只是将值右移回到返回之前的评估堆栈.
.maxstack 1
.locals init ([0] bool CS$1$0000)
L_0000: nop
L_0001: ldarg.0
L_0002: call bool FuncNameNotImporant::MethodNameNotImporant(string)
L_0007: stloc.0
L_0008: br.s L_000a
L_000a: ldloc.0
L_000b: ret
Run Code Online (Sandbox Code Playgroud)
我最好猜测它为什么这样做是为了确保评估堆栈上的值在返回之前实际上是一个布尔值.但我对明确跳到下一行是无能为力的; 我的意思是,不管怎样它不会去那里?该方法的C#源代码只有一行,它返回方法的结果.
我在一个主机上启动了两个远程演员,它们只是回显发送给他们的内容.然后我创建另一个actor,它向两个actor发送一些消息(使用!!),并保留一个List of Future对象来保存这些actor的回复.然后我遍历此List获取每个Future的结果.问题在于大多数时候某些期货永远不会回归,甚至认为这位演员声称它已经发出了回复.问题是随机发生的,有时它会通过整个列表,但大多数情况下它会在某个时刻陷入困境并无限期挂起.
以下是一些在我的机器上产生问题的代码:
Sink.scala:
import scala.actors.Actor
import scala.actors.Actor._
import scala.actors.Exit
import scala.actors.remote.RemoteActor
import scala.actors.remote.RemoteActor._
object Sink {
def main(args: Array[String]): Unit = {
new RemoteSink("node03-0",43001).start()
new RemoteSink("node03-1",43001).start()
}
}
class RemoteSink(name: String, port: Int) extends Actor
{
def act() {
println(name+" starts")
trapExit=true
alive(port)
register(Symbol(name),self)
loop {
react {
case Exit(from,reason) =>{
exit()
}
case msg => reply{
println(name+" sending reply to: "+msg)
msg+" back at you from "+name
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Source.scala:
import scala.actors.Actor
import scala.actors.Actor._ …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种计算 python 3.2 futures.ThreadPoolExecutor 中挂起任务数量的方法。
直到知道,我有两个解决方案:1.- 在提交时增加待处理任务的计数并添加回调以在任务完成时减少计数 2.- 保留期货列表并检查哪些仍处于待处理状态
有没有更直接的东西(即执行者的属性或方法)?
提前致谢
我正在用 MySQL 编写一个存储过程。下面是我写的代码:
SET @qry = 'SELECT id into @wid FROM work_profile where candidate_id = 1223 limit 1';
PREPARE statement FROM @qry;
EXECUTE statement;
Run Code Online (Sandbox Code Playgroud)
但是,@wid执行后为空。
SELECT id FROM work_profile where candidate_id = 1223 limit 1
Run Code Online (Sandbox Code Playgroud)
这将返回值 1443。
我对新版本的HTML和新版本的XHTML的讨论和进展感到困惑.他们是竞争者吗?如果是这样,最有可能成为网络的未来?如果不是,每个人的不同竞争目的是什么?
我们是否应该在这里进行BluRay/HDVD战斗?最终是否有明确的决定?我担心未来浏览器会选择最简单和/或最闪亮的功能来实现,让网络开发人员试图找出任何新网络应用程序的最低标准.
使用用于类型安全铸造的案例构造很容易在scala中完成.以下代码确保square仅在具有相应类型的对象上调用.
class O
class A extends O {
def square(i: Int):Int = { i*i }
}
class B extends O {
def square(d: Double):Double = { d*d }
}
class C extends O {}
def square(o: O) = o match {
case a:A => print(a.square(3))
case b:B => print(b.square(3.0))
case c:C => print(9)
case _ => print("9")
}
Run Code Online (Sandbox Code Playgroud)
另一方面,存在这样的情况:使用用于铸造的类型信息并不那么容易,并且仅检查a的可用性{def square(Int): Int}就足够了.scala中是否有一个允许执行类似操作的构造
def square(o: O) = o match {
case a:{def square(Int):Int} => print(a.square(3))
case b:{def square(Double):Double} …Run Code Online (Sandbox Code Playgroud) 我是Haskell的初学者,我很难搞清楚一些代码.我需要做什么才能在我的代码的IO部分获得正确的类型?
提前致谢.
loadPeople :: FilePath -> IO [Person]
loadPeople file = do
lines <- getLines file
map parsePerson lines
getLines :: FilePath -> IO [String]
getLines = liftM lines . readFile
parsePerson :: String -> Person
parsePerson line = ...........
Run Code Online (Sandbox Code Playgroud)
map 在Leksah中用红色加下划线,我收到的编译错误是:
src\Main.hs:13:3:
Couldn't match expected type `IO [Person]'
against inferred type `[Person]'
In the expression: map parsePerson lines
In the expression:
do { lines <- getLines file;
map parsePerson lines }
In the definition of `loadPeople':
loadPeople file
= …Run Code Online (Sandbox Code Playgroud) 如何确定变量的值是否在"类型声明"的范围内.防爆.
Type
TManagerType = (mtBMGR, mtAMGR, mtHOOT);
...
var
ManagerType: TManagerType;
....
procedure DoSomething;
begin
if (ManagerType in TManagerType) then
DoSomething
else
DisplayErrorMessage;
end;
Run Code Online (Sandbox Code Playgroud)
谢谢,彼得.
我实现了一个简单的作业处理器来处理期货中的子作业(scala.actors.Futures).这些期货本身可以为加工子工作创造更多的未来.现在,如果其中一个子工具抛出异常,我希望作业处理器回复该作业的错误消息.我有一个解决方法来发现失败的subjobs,但我不确定这是否是最好的解决方案.基本上它的工作原理如下:
sealed trait JobResult
case class SuccessResult(content: String) extends JobResult
case class FailedResult(message: String) extends JobResult
for(subjob <- subjobs) yield {
future {
try {
SuccessResult(process(subjob))
} catch {
case e:Exception => FailedResult(e.getMessage)
}
}
}
Run Code Online (Sandbox Code Playgroud)
顶级的结果是JobResults的递归列表列表... 我递归搜索List以查找失败的结果,然后根据结果类型返回错误或组合结果.这是有效的,但我想知道是否有一个更优雅/更容易的解决方案来处理未来的例外?
我正在开发一个需要在线程池中运行许多作业的C++项目.这些作业容易出错,这意味着我需要知道每个作业在完成后如何终止.作为Java程序员,我喜欢使用"期货"或类似范例的想法,类似于Java的util.concurrent包中的各种类.
我有两个问题:首先,C++已经存在这样的事情(我在Boost中找不到任何东西,但也许我看起来不够努力); 第二,这对C++来说是一个理智的想法吗?
我找到了一个简短的例子,说明我在这里要完成的任务:
http://www.boostcookbook.com/Recipe:/1234841
这种方法有意义吗?