小编Rob*_*een的帖子

IORef仍然引用更新后的旧值

背景

我是一名开始学习Haskell的Schemer.我正在尝试在SICP的第4章之后在C中实现Scheme解释器.事实证明直接用C编程太难了.所以我决定先在Haskell中进行原型设计.在48小时内自己编写一个方案的帮助下,我已经实现了除变量,闭包和环境之外的所有功能.

问题

修改IORef不会在调用之间持续存在main.我希望程序打印(False)(True)(True)(True) ...但实际上它打印(False)(True)(False)(True)(False)(True) ...

代码的精简版:

import Data.IORef

data SCM = Environment (IORef Bool) SCM | Empty'Environment

global :: IO SCM
global = Environment <$> newIORef False <*> pure Empty'Environment

print'' :: SCM -> IO ()
print'' ls =
  case ls of
    Empty'Environment -> pure ()
    Environment first rest -> readIORef first >>= putStr . show >> print'' rest

print' :: SCM -> IO ()
print' ls = putStr …
Run Code Online (Sandbox Code Playgroud)

io scheme haskell ioref

5
推荐指数
1
解决办法
145
查看次数

bipush 在 JVM 中是如何工作的?

我知道 iload 接受整数 -1 到 5,但是如何使用 bipush 指令扩展到更高的数字?特定整数如何与字节码一起存储?

java jvm jvm-bytecode

5
推荐指数
2
解决办法
4130
查看次数

String.compareIgnoreCase返回错误的结果

我正在使用Java 8.

我已经苦苦挣扎了几天才能理解与字符串比较相关的错误.看看这个测试.两个字符串是不同的("i"不是同一个,而不是另一个的大写/小写版本).

我希望这个测试能够通过.第一个断言成功但第二个断言失败(由于某种原因,compareIgnoreCase返回0)

知道发生了什么事吗?

谢谢

String str1 = "v?rus";
String str2 = "virus";
Assert.assertNotEquals(0, str1.compareTo(str2));
Assert.assertNotEquals(0, str1.compareToIgnoreCase(str2));
Run Code Online (Sandbox Code Playgroud)

java unicode case-insensitive

5
推荐指数
1
解决办法
90
查看次数

为什么用模式匹配收集不能缩小特定类?

让我们考虑以下特征:

sealed trait AB
case class A(a: Int) extends AB
case class B(b: Int) extends AB
Run Code Online (Sandbox Code Playgroud)

我试图将collect集合限制为特定的子类.

如果我尝试collect,匹配单个组件并重新组合元组:

scala> Seq.empty[(Int, AB)].collect { case (id, a @ A(_))  => (id, a) } : Seq[(Int, A)]
res6: Seq[(Int, ab.A)] = List()
Run Code Online (Sandbox Code Playgroud)

编译器很高兴,但如果尝试返回完整匹配:

scala> Seq.empty[(Int, AB)].collect { case x @ (_, A(_))  => x } : Seq[(Int, A)]
Run Code Online (Sandbox Code Playgroud)

事情变得丑陋:

<console>:27: error: type mismatch;
 found   : Seq[(Int, ab.AB)]
 required: Seq[(Int, ab.A)]
       Seq.empty[(Int, AB)].collect { case x @ (_, A(_))  => …
Run Code Online (Sandbox Code Playgroud)

scala type-inference pattern-matching scala-collections scala-compiler

5
推荐指数
1
解决办法
181
查看次数

值 isBlank 不是 String 的成员

我正在使用 sbt 1.2.6 来编译我的项目。在我的本地机器编译运行良好,但是当使用 travis-ci 进行测试时,编译器抱怨value isBlank is not a member of String.

你可以在这里找到源代码 https://github.com/LukeDS-it/webfleet-driver/blob/679dff9877ea1edd403dc6cd3d55a22d5fd5328f/server/src/main/scala/it/ldsoftware/webfleet/driver/services/v1/AggregateService #L138

和这里的构建报告 https://travis-ci.com/LukeDS-it/webfleet-driver/builds/92441228

我没有更多信息可以提供。我的 IDE 说一切正常,如果我在本地运行编译或测试,一切正常。

我错过了什么?

scala sbt travis-ci

5
推荐指数
1
解决办法
1143
查看次数

发送不必要的对象有多大影响?

我经常发现自己需要有很多对象作为方法的参数,但是所有或几乎所有这些对象都可以从另一个对象中引用.在我的例子中,我有大量的对象,如粒子管理器和抛射物管理器,它们都是屏幕对象的属性.有时我只是将整个屏幕对象作为参数来节省时间,获得我需要的任何对象.

这是好的做法吗?一方面,它节省了我的时间,但是当我将其作为参数发送时,我不知道屏幕对象中额外(不必要的)信息的影响.这效率低吗?

java performance

5
推荐指数
1
解决办法
74
查看次数

Akka 和 future 的同时请求太多

我的场景是这样的。

  1. 我有一个由大量报告组成的向量,需要使用 REST API 调用发送。
  2. 我正在使用 Futures.traverse(1中提到的向量)
  3. 由于向量太大,因此会因超出最大打开请求数而失败。

我能想到的一个初步解决方案是增加 max-open-requests 设置。但这里的问题是我不知道需要提前发送多少报告。

有人可以建议一个替代解决方案,例如限制通过 Futures.traverse 发生的并行性

parallel-processing scala future akka

5
推荐指数
1
解决办法
306
查看次数

当测试报告显示没有测试失败时,为什么 Gradle 会说“有失败的测试”?

我以前也遇到过类似的问题,但上次至少有一些测试类无法初始化或类似的问题。这一次,Gradle 说

Task :foo-bar:liveTest FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':foo-bar:liveTest'.
> There were failing tests. See the report at: file:///C:/Users/...
Run Code Online (Sandbox Code Playgroud)

但 CI 服务器 TeamCity 并未显示此构建的测试失败。甚至当我在本地计算机上重新运行失败的 Gradle 任务以查看该报告时,JUnit 报告也没有显示任何测试失败或错误!测试中也没有在错误级别记录任何内容,也没有在我不希望看到的警告级别记录任何内容。

可能是什么问题呢?我该如何调试这个?

java junit gradle

5
推荐指数
1
解决办法
1万
查看次数

对IORefs制造反击的困惑

我找到了一些示例代码,并稍微改了一下

counter = unsafePerform $ newIORef 0

newNode _ = unsafePerformIO $
              do
                i <- readIORef counter
                writeIORef counter (i+1)
                return i
Run Code Online (Sandbox Code Playgroud)

每次运行时返回1然后2然后3然后3等.

但是当我改变它

newNode = unsafePerformIO $
              do
                i <- readIORef counter
                writeIORef counter (i+1)
                return i
Run Code Online (Sandbox Code Playgroud)

然后我每次运行都得0.

为什么会发生这种情况,我该怎么做才能解决这个问题?

monads haskell unsafe-perform-io ioref

4
推荐指数
1
解决办法
1518
查看次数

Jsf错误:java.lang.ClassCastException

我在glassfish 3.0.1上使用jsf 2.0来构建我的搜索引擎的接口,当我在我的jsf页面上使用Openfaces组件时,每当我提交表单时,我都会收到以下错误消息:

java.lang.ClassCastException:[Ljava.lang.Object; 无法转换为com.sun.faces.application.view.StateHolderSaver

我没有在网上找到任何帮助,请问有什么问题?以及如何摆脱它?

谢谢.

java jsf openfaces

4
推荐指数
1
解决办法
5877
查看次数