如何使用绑定创建自己的irb?

时间:2019-07-29 21:55:26

标签: ruby binding irb

尝试编写通过命令行与用户进行交互通信的程序。 与正常的irb交互时,我们可以给块提供评估或留空。像这样:

irb(main):001:0> 1+2
#=> 3
irb(main):002:0> class Foo
irb(main):003:1>  def foo
irb(main):004:2>    print 1
irb(main):005:2>  end
irb(main):006:1> q
[2156][giles@nikola:~]$
#=> nil

在此交互式shell上键入“ q”后,我们应该能够退出irb shell以及整个程序。

我创建了一个程序来打开此交互式会话,我们可以对程序的现有内容执行某些操作。就像我们可以更改@var的值一样 irb(main):001:0> @var ='new' =>新

但是我想使用绑定来实现此目的,也不想在我的代码中使用“ #require'irb'”来调用irb方法。

我的解决方案:

require 'irb'
class C
    def my_method
        @var = 'hi'
        $my_binding = binding
        IRB.start(__FILE__)
    end
end

C.new.my_method

预期结果:我想以-

class Bind
  def get_binding(param)
    binding
  end
end

....

1 个答案:

答案 0 :(得分:0)

我想我想要这样的东西(创建了IRB,但仍然无法评估语句):

class Demo
  def initialize(n)
    @secret = self.class.send(:define_method,n) { instance_eval"#{n}" }
  end
  def get_binding
    binding
  end
end

user_input = ''
k2 = Demo.new(user_input)
b2 = k2.get_binding

until user_input == 'q' do
  user_input = gets.chomp
  puts eval('@secret', b2)
end