如何评估条件情况并返回函数对象?

时间:2018-08-03 14:57:55

标签: hy

得到TypeError:不知道如何包装 at 0x000001B879FD3D08>

运行时

;a fn object
(setv a_fn (fn [x] (+ 1 x)))
;a mock predicator
(setv predicator True)
;inject predicator and a_fn into a (cond ..)
(setv cond_expr `(cond [(~predicator) [~a_fn]]))
;eval at another place 
(eval cond_expr)

如何创建“ cond_expr”以获取结果[a_fn]?

1 个答案:

答案 0 :(得分:0)

为了evalHyExpression,必须首先将其编译为Python ast。尽管可以将任意对象放入HyExpression中,但这并不意味着您可以对其进行编译。 (关于simulating this feature的讨论很少,但目前尚不可用。)

Hy编译器只能对称为Hy模型类型的某些数据类型集或可以自动转换为这些Hy模型的其他几种类型执行此操作。

在Python ast中没有明显的方法表示函数 object ,因此没有Hy模型。但是您可以编译功能 definition

=> (setv a-fn '(fn [x] (+ 1 x)))
=> (setv cond-expr `(cond [True ~a-fn]))
=> (eval cond-expr)
<function <lambda> at 0x0000020635231598>

或函数的符号

=> (defn b-fn [x] (- x 1))
=> (setv cond-expr2 `(cond [True b-fn]))
=> (eval cond-expr)
<function <lambda> at 0x0000020635208378>