如何在 hy 程序中声明 'main'

How to declare 'main' in a hy program

根据官方文档,我应该可以使用

def main [ &rest _ ]

我在 let 块中尝试了示例:

(import argparse) 
(require [hy.contrib.walk [let]]) 
(def main [&rest _]
   (let [parser (argparse.ArgumentParser)]
     (.add-argument parser "STRING"
       :help "string to replicate")
     (.add-argument parser "-n" :type int :default 3
       :help "number of copies")
     (setv args (parser.parse_args))
     (print (* args.STRING args.n))
     ))

但我看到以下错误:

... trace
NameError: name 'hyx_def' is not defined

奇怪的是,打印字符串 'n' 次的代码块工作正常。但是错误出现在最后。

根据这个 link : https://github.com/hylang/hy/pull/1483 ,def 已被完全删除。

那么我应该用什么来声明一个主函数?

defmain

是正确的形式。以下作品:

(import argparse) 
(require [hy.contrib.walk [let]]) 
(defmain [&rest _]
   (let [parser (argparse.ArgumentParser)]
     (.add-argument parser "STRING"
       :help "string to replicate")
     (.add-argument parser "-n" :type int :default 3
       :help "number of copies")
     (setv args (parser.parse_args))
     (print (* args.STRING args.n))
     ))