我正在尝试在storm服务器上部署拓扑,它一直告诉我以下信息:
java.lang.RuntimeException: java.lang.IllegalStateException: Attempting to call unbound fn: #'storm-nblabla/operation-bolt__ at backtype.storm.clojure.ClojureBolt.prepare(ClojureBolt.java:60) a
所以我想我必须绑定一个我在prepare函数中使用的函数。所以我的问题是如何在clojure中绑定函数?
当做,
贺拉斯
1条答案
按热度按时间kgqe7b3p1#
在clojure中,值通常以以下两种方式之一绑定:
局部变量,没有名称空间限定符(通常在
let
声明或fn
/loop
参数)这适用于未在块范围外引用的值(除非它们是作为块内函数的参数或块的返回值提供的)。
具有命名空间作用域的变量,通常使用
def
(或类似于defn
)这适用于应该在命名空间作用域中可访问的值,可以在任何可以访问命名空间的地方访问这些值。
错误(尝试调用未绑定的fn)是由使用
declare
要创建var,然后调用它而不提供真正的定义:在这个代码中,var存在(
declare
创建了它),但没有赋值。所以需要后一种绑定,var绑定:在某个地方,您的代码的某个部分或您正在使用的库的代码声明了一个var,该var应该绑定到一个可调用的值,但尚未正确初始化。图书馆有图书馆吗
init
你没调用过的函数?在定义可见之前,可能需要一个名称空间?