【问题标题】:Programmatically Loading Libraries with a Ruby REPL使用 Ruby REPL 以编程方式加载库
【发布时间】:2015-12-28 23:13:29
【问题描述】:

我一直在尝试在脚本中加载项目库,然后启动 IRB 或 ripl 以允许用户与项目库进行快速交互。我已经成功地做到了。

我的问题是以编程方式关闭命令行回显。

手动调用irb_context.echo = false很容易,但这不能以编程方式工作,因为控制权已移交给IRB.start的IRB,而irb_context在调用IRB.start之前不可用

【问题讨论】:

    标签: ruby read-eval-print-loop irb


    【解决方案1】:

    如果您希望IRB 在用户输入时不写任何内容,您可以手动设置信息:

    IRB.conf[:PROMPT][:NO_REPLY] = {
      :PROMPT_I => "%N(%m):%03n:%i> ",
      :PROMPT_S => "%N(%m):%03n:%i%l ",
      :PROMPT_C => "%N(%m):%03n:%i* ",
      :RETURN => "\n" # used to printf
    }
    
    IRB.conf[:PROMPT_MODE] = :NO_REPLY
    

    这样,REPL 将忽略返回值,只打印一个换行符。有关详细信息,请参阅official docs

    【讨论】:

    • 您的示例不起作用NoMethodError: undefined method `[]=' for :DEFAULT:Symbol,PROMPT_MODE IRB.conf[:PROMPT_MODE] 返回一个符号=> :DEFAULT。你的意思是[:PROMPT]
    • @jtzero 是的,我现在修好了
    • 这似乎在 IRB 内部工作,但从脚本:require 'irb'; IRB.conf[:PROMPT] 返回nil
    • @DCKlingensmithn 它应该修改提示配置
    • 好的,我必须将IRB.conf[:PROMPT] 初始化为空哈希以使该代码sn-p 工作,代码完成,但仍然打开回显。这是我在脚本中使用的代码:require 'irb'; IRB.conf[:PROMPT] = {}; IRB.conf[:PROMPT][:NO_REPLY] = { :PROMPT_I => "%N(%m):%03n:%i> ", :PROMPT_S => "%N(%m):%03n:%i%l ", :PROMPT_C => "%N(%m):%03n:%i* ", :RETURN => "\n" # used to printf }; IRB.conf[:PROMPT_MODE] = :NO_REPLY; IRB.start
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多