【发布时间】:2021-03-14 07:44:36
【问题描述】:
我正在编写以下代码:
(require [hy.contrib.walk [let]])
(defn maybe? [command-text]
(let [splitted (.split command-text " ")]
(= (get splitted 0) "maybe")))
(defn if? [command-text]
(let [splitted (.split command-text " ")]
(+ (get splitted 0) "if")))
...直到我意识到我在做一些重复的事情,所以我想把模式分解出来:
(import [hy [HySymbol]])
(defmacro command-dispatcher [command-type]
`(defn ~(HySymbol (+ command-type "?")) [command-text]
(let [splitted (.split command-text " ")]
(= (get splitted 0) ~command-type))))
但是,如果我在 HyREPL 中评估 (command-dispatcher "maybe"),我会得到 None。
=> (command-dispatcher "maybe")
def is_maybe(command_text):
_hyx_letXUffffX3 = {}
_hyx_letXUffffX3['splitted'] = command_text.split(' ')
return _hyx_letXUffffX3['splitted'][0] == 'maybe'
None
这很奇怪,因为宏应该返回HyExpression,而不是None。我错过了什么?
【问题讨论】: