线程上的 Clojure 错误:java.lang.IllegalArgumentException:键必须是整数

2024-01-08

我对两件事感到困惑。一,错误消息本身。第二,这段代码启动了如此多的线程。我本以为它会启动 2 或 3 个线程来响应单个请求,但是当我在本地主机上运行它并将浏览器指向它(仅一次)时,它会启动 40 个线程。诚然,我使用的是 Chrome,它在后台发送 3 个请求,原因有多种,谷歌将其辩护为“功能”(速度)。

这个错误是什么意思?

Exception in thread "Thread-39" java.lang.IllegalArgumentException: Key must be integer
at clojure.lang.APersistentVector.invoke(APersistentVector.java:250)
at serve_pages_from_memory.core$listen_and_respond$fn__51.invoke(core.clj:30)
at clojure.lang.AFn.run(AFn.java:24)
at java.lang.Thread.run(Thread.java:680)

我看到之前 StackOverflow 上也讨论过类似的错误,但我不明白它们如何与我的问题联系起来:

clojure 按键过滤映射 https://stackoverflow.com/questions/7207495/clojure-filter-map-by-keys

我正在尝试构建一个提供页面服务的简单应用程序。我这样做主要是为了测试我自己对 Clojure 的了解。这是大部分代码:

(defn start-thread [f]
(doto (new Thread f) (.start)))

(defn serve-page [wrt]
(let [content-length (count page-string)] 
(. wrt println "HTTP/1.1 200 OK")
(. wrt println "Content-Type: text/html; charset=UTF-8")
(. wrt println "Connection: Keep-Alive")
(. wrt println (str "Content-Length: " content-length))
(. wrt print "\r\n")
(. wrt print page-string)
(. wrt flush)
(. wrt close)))

(defn listen-and-respond [ss]
(let [client (. ss accept)]
(start-thread #([client]
                  (let [wrt (new PrintWriter (new BufferedWriter (new OutputStreamWriter (. client (getOutputStream)))))]        
                    (serve-page wrt))))))

(defn create-server [port]
(let [ss (new ServerSocket port)]
(start-thread #(when-not (. ss (isClosed))
                 (try (listen-and-respond ss)
                      (catch SocketException e))
                 (recur)))
ss)) 

(defn -main [& args]
(println "Server is starting")
(let [port (Integer/parseInt (first args))]
(create-server port)))

该错误似乎是在抱怨这一行:

                (serve-page wrt))))))

但这是一个函数名和一个 PrintWriter 对象。错误消息表明这是关于带有键的地图的问题。该错误没有任何意义。

有什么建议么?


#([client]
   (let [wrt (new PrintWriter (new BufferedWriter (new OutputStreamWriter (. client (getOutputStream)))))]        
     (serve-page wrt)))

纯属无稽之谈。如果您想要带有命名参数的 lambda,请使用fn form:

(fn [client]
  (let [wrt (new PrintWriter (new BufferedWriter (new OutputStreamWriter (. client (getOutputStream)))))]        
    (serve-page wrt)))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

线程上的 Clojure 错误:java.lang.IllegalArgumentException:键必须是整数 的相关文章

  • 枚举和 Clojure

    在Java C世界中 人们经常使用枚举 如果我使用的是使用枚举的 Java 库 我可以在它们和关键字之间进行转换 例如 使用 java lang Enum valueOf e aget Ljava lang Enum e getEnumCo
  • “swank-clojure”到底是做什么的,我们有“swank-SOMETHING_ELSE”吗?

    我的肤浅理解是 swank clojure 使 M x slime connect 成为可能 我的意思是 它提供了与 clojure 服务器的连接 例如 lein swank 我的理解正确吗 如果不是 那swank的目的是什么 那么 是否有
  • Clojure:让作用域和函数返回值

    我在弄清楚如何使用 let 形式时遇到了一些麻烦 在下面的示例中 我想在本地绑定值 cols 以便稍后在函数中处理它 然而 我注意到 如果我使用 let 函数 sel opt tmp 将返回 nil 值而不是列表 defn sel opt
  • 在抛出异常之前重试某件事 3 次 - 在 clojure 中

    我不知道如何在Clojure中实现这段Python代码 for i in range 3 try except e if i 2 raise e else continue else break 我想知道为什么在 Python 中如此简单的
  • 无法删除 IntelliJ/Cursive 中的括号

    我正在使用 IntelliJ Cursive 编写 Clojure 我发现 删除括号的唯一方法就是将其中的内容完全删除 然后才能将括号删除 例如 假设我有以下代码 list 我只想删除左括号 一旦我在左括号上按退格键 IDE 就会忽略此行为
  • Clojure 集合与序列的相等性

    我注意到 Clojure 1 4 似乎很乐意考虑向量等于seq相同的向量 但同样不适用于地图 1 2 seq 1 2 gt true 1 2 seq 1 2 gt false 为什么要这样的行为 这样会有所不同吗 Clojure 的 可以认
  • 使用 Compojure、Hiccup 和 Ring 上传文件

    要将文件上传到我用 Clojure 编写的服务器 我需要一个如下所示的客户端表单
  • clojure 有 AES 库吗?

    clojure 有 AES 加密库吗 我应该使用通过 maven 或 clojars 提供的 java 库吗 感谢您的时间和考虑 下面是一个使用可用的 java 加密库的可能更惯用的示例 encrypt and decrypt这里每个都简单
  • 你能在 Clojure 中获取加载函数的“代码即数据”吗?

    换一种方式 好吧 代码就是数据 http groups google com group clojure browse thread thread 554cdc59d8a46f01 该线程解决了如何从源文件中读取的问题 但我想知道如何将已加
  • 如何使用 Clojure 在命令行中更改目录?

    我正在寻找的是 Windows 命令行中的这种命令行交互 C temp1 gt clj some script clj C temp2 gt 其中 some script clj 包含类似以下内容 cd c temp2 那么问题来了 如何实
  • 我如何在环中模拟 json post 请求?

    我正在使用橄榄石 https github com xeqi peridot https github com xeqi peridot测试我的环应用程序 它工作正常 直到我尝试使用 json 数据模拟 post 请求 require ch
  • 为什么我的字符串函数返回 clojure.lang.LazySeq@xxxxxx?

    我使用 leiningen REPL 定义了以下 3 个函数 defn rand int range floor ceiling floor rand int ceiling floor defn mutate index mutates
  • 内存数据存储中有 Clojure 吗?

    我主要在 Node 中编程 并且喜欢文档存储 但我想首先对客户端和服务器之间的数据调用进行原型设计 我用过lowdb https github com typicode lowdb and da base https github com
  • Java 中 .NET 的 Lambda 表达式

    我最近 再次 从 C 迁移到 Java 但我非常怀念 lambda 表达式和 C 的 IEnumerable Foreach 之类的东西 所以我正在寻找Java中的lambda表达式库 有比这更好的图书馆吗LambdaJ http code
  • Clojure 中的快速素数生成

    我一直在努力解决欧拉计划 https projecteuler netClojure 中的问题得到了改善 我已经遇到过几次素数生成问题 我的问题是它花费的时间太长了 我希望有人能帮助我找到一种有效的方法 以 Clojure 的方式做到这一点
  • 竞争条件和 Clojure Atoms

    clojure atom 的文档指出 Changes to atoms are always free of race conditions 然而 竞争条件不仅是根据更改定义的 而且是在不同线程中并行逻辑操作的上下文中定义的 我想知道 保证
  • 在 Clojure 中的函数上使用“apply”时,如何显式指定名称空间?

    这里的 graph 是高阶函数 它返回一个在其范围内设置了配置的函数 ns bulbs neo4jserver graph defn out1 Test func that simply returns out1 config out1 d
  • Leiningen 在哪里安装 clojure 库?

    第一次运行lien 它会安装clojure 但是要安装吗 似乎并不在 图书馆 图书馆 lein clojure jar 和贡献 jar 在 Unix OS X 标题 上是否有固定位置 Leiningen使用maven 或者更准确地说 是实现
  • 排序映射对现有键返回 nil 值

    我尝试从排序映射中按键获取值 并按其返回的值进行比较nil def tmap 1 v 1 2 v 2 3 v 3 def tmap sorted apply sorted map by let val comp compare get in
  • 用纯函数式语言保持状态

    我正在尝试弄清楚如何执行以下操作 假设您正在开发直流电机的控制器 您希望让它以用户设置的特定速度旋转 def set point ref sp 90 while true let curr read speed controller set

随机推荐

  • NPM 警告:“引擎不受支持”

    我输入了命令npm install D tailwind css postcss autoprefixer vite在 VS 代码中 我的环境是 NPM版本 8 1 2 Node js 版本 16 13 1 这导致了以下警告 npm WAR
  • Oracle数据库的默认用户名和密码

    我在安装 Oracle DB 时忘记输入 sys system 和 hr 密码并点击 确定 但现在对于 SQ Plus 它需要这些凭据才能在命令提示符下登录 如何获取默认用户名和密码 您只需登录 sqlplus as sysdba 然后为各
  • 命令中的 CQRS 代码重复

    我有一个关于 CQRS 原则的命令端代码重复的问题 一直在关注以下文章 https www cuttingedge it blogs steven pivot entry php id 91 https www cuttingedge it
  • C#中如何获取对象的地址

    在c 中如何获取对象的地址 我搜索并发现 GCHandle handle GCHandle Alloc obj GCHandleType WeakTrackResurrection int address GCHandle ToIntPtr
  • 从二进制文件存储/加载 numpy 数组

    我想从二进制文件存储和加载 numpy 数组 为此 我创建了两个小函数 每个二进制文件应包含给定矩阵的维数 def saveArrayToFile data fileName with open fileName w as file a a
  • 我们可以从函数中按值返回具有已删除/私有复制/移动构造函数的对象吗?

    在 C 03 中 不可能按值返回具有私有非定义复制构造函数的类的对象 struct A A int x private A A const A f return A 10 error return 10 error too 我想知道 C 1
  • 使用 jsoncpp 迭代 JSON 对象数组

    我有一个 JSON 对象数组 例如 jsonArr 如下所示 attr1 somevalue attr2 someothervalue attr1 yetanothervalue attr2 andsoon 使用 jsoncpp 我尝试迭代
  • TWRequest 泄露?

    我在 ios5 中使用 Request 但 Leaks 报告 Request 内存泄漏 我正在做这样的事情 我是不是哪里出错了 TWRequest postRequest TWRequest alloc initWithURL NSURL
  • 无法将类型“float”隐式转换为“int”

    当我尝试运行以下代码时 出现错误 无法将类型 float 隐式转换为 int 我做了很多搜索 遗憾的是我无法找到针对此类错误的任何帮助 int sum1 cols rows float h twoEnds x sum1 h cols x t
  • android System.loadLibrary 加载文件的位置

    网上的一些文章告诉我System loadLibrary 将加载文件 data data app package 目录 我想知道这是否因每个供应商的实施而异或固定 最终由供应商来定义文件系统 文件系统布局 所以它可能在不同的地方 如果没有自
  • Html-loader + file-loader 未捆绑正确的图像源

    我计划在一个项目中使用 Webpack 并使用 Html loader file loader 设置我的工作流程 以获取带有图像动态 src 的生产 html 文件 正如 Colt Steele 所教的那样 这是我的 src 文件 索引 h
  • 如果程序的一部分表现出未定义的行为,它会影响程序的其余部分吗?

    假设程序员忘记初始化他的一个自动变量 并且他使用了它的值 从而调用了未定义的行为 int i 0 j printf value of j d n j char buf 256 fputs Enter query stdout fgets b
  • nvlink、可重定位设备代码和静态设备库

    在调查可重定位设备代码的一些问题时 我偶然发现了一些我不太理解的东西 这是如图所示的用例slide 6 http on demand gputechconf com gtc express 2012 presentations gpu ob
  • 无法使用 rarfile 模块提取 RAR 存档

    我一直在尝试制作一个提取 rar 文件的脚本 但收到错误 我一直在努力理解该模块的文档 但无济于事 我是编程新手 所以有时会迷失在所有文档中 这是我的代码的相关部分以及收到的错误 我的代码片段 import rarfile rarpath
  • 我可以在 Flutter 中使用自定义环境变量吗?

    我想以与我的同事不同的方式配置我们的日志库 并且我不想冒险检查我的本地配置 即 void main LOG minLevel Logger VERBOSE LOG showSymbols false runApp RestartWidget
  • 如何检测文本中的源代码?

    是否可以检测文本中的编程语言源代码 主要是 Java 和 C 例如我想知道本文中是否有源代码部分 text text text text text text text text text text text text text text t
  • 理解Java中的继承和抽象类

    好吧 我通过谷歌搜索寻找文档 但是我没有找到任何真正描述我想要回答的内容 所以我在这里问你们 所以我得到了继承 以及它是如何工作的 我遇到的问题是有时我看到一个对象最初定义为一种类型 然后设置为不同的类型 但我不明白到底发生了什么 这是一个
  • python 找到两个numpy数组的交点

    我有两个描述空间曲线的 numpy 数组 它们在一个点上相交 我想在两个数组中找到该交点的最近值 我有这段代码可以正常工作 但对于大量点来说它会变慢 from scipy import spatial def nearest arr0 ar
  • 在模板文字中使用条件语句

    我知道有更优雅的方法来定义包含变量的字符串 但如果我想在 ES6 之前添加一个条件 我会这样做 var a text conditional a b more text 现在使用模板文字我会做 let a if conditional a
  • 线程上的 Clojure 错误:java.lang.IllegalArgumentException:键必须是整数

    我对两件事感到困惑 一 错误消息本身 第二 这段代码启动了如此多的线程 我本以为它会启动 2 或 3 个线程来响应单个请求 但是当我在本地主机上运行它并将浏览器指向它 仅一次 时 它会启动 40 个线程 诚然 我使用的是 Chrome 它在