【问题标题】:Run Coffeescript Interactive (REPL) with a script使用脚本运行 Coffeescript Interactive (REPL)
【发布时间】:2023-11-22 18:02:01
【问题描述】:

在 python 中,我可以运行一个脚本并在该脚本的上下文中进入交互模式。这让我弄乱了全局变量以及不检查程序状态的内容。

$ python -i hello.py

我可以用 Coffeescript 做到这一点吗?我尝试了以下方法:

$ coffee -i hello.coffee

不加载 hello.coffee。相当于咖啡-i

$ cat hello.coffee | coffee -i

在 REPL 中逐行运行脚本,但在 EOF 之后结束 REPL。

【问题讨论】:

  • 来自*.com/a/13386057/149330:使用cat hello.coffee - | coffee
  • 它不是你要找的东西,但是把它写成一个模块然后用require在正常的repl模式下加载它怎么样?
  • 这是不使用coffeescript imo的唯一真正原因。需要能够从脚本调用coffeescript repl。你可以使用源映射 n 东西,但它有点尴尬

标签: coffeescript interactive read-eval-print-loop


【解决方案1】:

我也遇到了这个问题。 @int3 提供的并没有解决这个问题,因为 CoffeeScript 是一种基于缩进的语言。 stdin 将逐行传递代码,但 repl 不够聪明,无法实现这一点。既然您发布了这个问题,我建议您在CoffeeScript 上创建一个问题(功能请求)

【讨论】:

    【解决方案2】:

    我最近开始了一个项目,为 Node 和相关语言(如 CoffeeScript)创建高级交互式 shell。其中一项功能是在启动时在解释器的上下文中加载文件或字符串,这会考虑到加载的语言。

    http://danielgtaylor.github.com/nesh/

    例子:

    # Load a string
    nesh -c -e 'hello = (name) -> "Hello, #{name}"'
    
    # Load a file
    nesh -c -e hello.coffee
    

    然后在解释器中你可以访问hello 函数。在 bash 中创建别名也是一个好主意:

    alias cs='nesh -c'
    

    【讨论】:

    • 这太棒了!谢谢你。
    【解决方案3】:

    cat foo.coffee - | coffee -i

    告诉 cat 先输出你的代码,然后输出标准输入,我想这会给你你想要的东西。

    【讨论】:

    • 这很整洁。有同样的问题,它不解析多行语句,它需要一个 process.exit() 加上一个 ctrl-c,但它仍然是一个有用的 hack 引导一些事情...
    最近更新 更多