Tôi mới dùng Racket (và của Lisp nói chung) và tôi tự hỏi nếu có một cách kinh điển để phát hiện nếu một kịch bản được chạy từ dòng lệnh?Phát hiện nếu tập lệnh được thực thi từ dòng lệnh trong Racket?
Ví dụ, trong Python cách tiêu chuẩn để làm được điều này sẽ có if __name__ == __main__:
như vậy:
def foo():
"foo!"
if __name__ == "__main__":
foo()
Bây giờ, giả sử tôi có mã vợt sau, và tôi muốn respond
được gọi chỉ khi điều này được chạy dưới dạng tập lệnh.
#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 '("" "")]))))
Có cách nào dễ dàng/tiêu chuẩn để đạt được những gì tôi muốn không?