在 REPL 或 irb 中重新使用 Ruby DSL?

发布于 2024-11-15 04:14:10 字数 708 浏览 2 评论 0原文

我为 jruby 中 UniVerse 数据库上的任务开发了一个简单的 DSL。它看起来像这样,

support = { 
    :host => 'localhost', 
    :account => 'SUPPORT'
}

uni_task support do 
    connect
    exec "LIST FILE A1"
    disconnect
end

并且实现方式如下

def uni_task(config, &block)
    session = UniSession.new
    session.instance_eval &block
end

我知道您可以在 ruby​​ 脚本中将其拖放到 irb,例如 this

但是有没有办法下降到命令行并将范围更改为默认执行对象的实例方法?

例如

irb> uni_commandline support
uni> connect
uni> exec "LIST FILE A1"

     .... output .....

uni> disconnect

I have developed a simple DSL for tasks on a UniVerse database in jruby. It looks something like this

support = { 
    :host => 'localhost', 
    :account => 'SUPPORT'
}

uni_task support do 
    connect
    exec "LIST FILE A1"
    disconnect
end

and is implemented like this

def uni_task(config, &block)
    session = UniSession.new
    session.instance_eval &block
end

I'm aware that you can drop to irb in a ruby script like this

But is there a way to drop to a command line and have the scope changed to execute instance methods of an object by default?

Eg

irb> uni_commandline support
uni> connect
uni> exec "LIST FILE A1"

     .... output .....

uni> disconnect

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

記柔刀 2024-11-22 04:14:10

在 irb 中,您可以使用 irb 命令在对象范围内移动:

irb> irb some_object

从那时起,任何命令都将在该对象的范围内执行(因此您可以直接调用其实例方法)。

In irb you can use the irb command to move inside an object scope:

irb> irb some_object

from then on any commands will execute inside the scope of that object (so you can call its instance methods directly).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文