未定义的局部变量或方法`method'for Kernel:Module

时间:2012-07-13 07:07:20

标签: ruby module kernel

我有两个红宝石课程:

  • 第一个包含一些我不允许修改的方法。 (这是一个IRB)

  • 第二个包含一个方法“run_code”,它应该从第一个类调用方法 保存他们的输出。

如何在内核模块中包含第一类的方法?我想用Kernel.eval(“myMethod”)来评估函数,但它给了我“未定义的局部变量或方法`myMethod'for Kernel:Module”错误。

我的第二堂课看起来像这样

require 'stringio'
require 'irb'

class Engine
  extend Shell
  def initialize()
    @binding = Kernel.binding
  end
  def run_code(code)
    # run something
    stdout_id = $stdout.to_i
    $stdout = StringIO.new
    cmd = <<-EOF
    $SAFE = 3
    $stdout = StringIO.new
    begin
      #{code}
    end
    EOF
    begin
      result = Thread.new { Kernel.eval(cmd, @binding) }.value
    rescue SecurityError
      return "illegal"
    rescue Exception => e
      return e
    ensure
      output = get_stdout
      $stdout = IO.new(stdout_id)
    end

    return output
  end

   private
   def get_stdout
     raise TypeError, "$stdout is a #{$stdout.class}" unless $stdout.is_a? StringIO
     $stdout.rewind
     $stdout.read
   end

end

我试过这样的事情

module Kernel
    extend Shell
end

class Object
    include Kernel
end

但它不起作用

Shell样本:

module Shell
  @@commands = {}
  def self.commands
    @@commands
  end

  @@command_groups = {}
  def self.command_groups
    @@command_groups
  end

 class Shell
    attr_accessor :hbase
    attr_accessor :formatter

    @debug = false
    attr_accessor :debug

    def initialize(hbase, formatter)
      self.hbase = hbase
      self.formatter = formatter
    end

    def hbase_admin
      @hbase_admin ||= hbase.admin(formatter)
    end

    def hbase_table(name)
      hbase.table(name, self)
    end

    def hbase_replication_admin
      @hbase_replication_admin ||= hbase.replication_admin(formatter)
    end

    def hbase_security_admin
      @hbase_security_admin ||= hbase.security_admin(formatter)
    end

[other methods *]

end

我想要包含Shell类

中的方法

0 个答案:

没有答案