Pau*_* M. 9 scheme command-line-interface racket
我是Racket(和Lisp的一般)的新手,我想知道是否有一种规范的方法可以检测脚本是否从命令行运行?
例如,在Python中,执行此操作的标准方法是if __name__ == __main__::
def foo():
"foo!"
if __name__ == "__main__":
foo()
Run Code Online (Sandbox Code Playgroud)
现在,假设我有以下的Racket代码,并且respond只有当它作为脚本运行时我才会被调用.
#lang racket
(require racket/cmdline)
(define hello? (make-parameter #f))
(define goodbye? (make-parameter #f))
(command-line #:program "cmdtest"
#:once-each
[("-H" "--hello") "Add Hello Message" (hello? #t)]
[("-G" "--goodbye") "Add goodbye Message" (goodbye? #t)])
(define (respond)
(printf "~a\n"
(apply string-append
(cond
[(and (hello?) (goodbye?)) '("Hello" " and goodbye.")]
[(and (hello?) (not (goodbye?))) '("Hello." "")]
[(and (not (hello?)) (goodbye?)) '("" "Goodbye.")]
[else '("" "")]))))
Run Code Online (Sandbox Code Playgroud)
有没有简单/标准的方法来实现我想要的?
Racket具有main子模块的概念.您可以在标题为" 主要和测试子模块 "的"球拍指南"部分中了解它们.它们正是您想要的 - 当使用racket或DrRacket 直接运行文件时,执行主子模块.如果文件被另一个文件使用require,则不运行主子模块.
与您的Python程序等效的Racket如下:
#lang racket
(define (foo)
"foo!")
(module+ main
(foo))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
128 次 |
| 最近记录: |