ruby - 如何在控制台中调用ruby中的某个方法 'disable'

标签 ruby

假设我有一个包含两种方法的 ABC 类。

class ABC
  def test
     "test"
  end

  def display_test
    puts test
  end
end

我只希望能够从我的控制台 (IRB) 调用 ABC.new.display_test(返回我的“test”)而不能调用 ABC.new.test ABC.new.send(:test) 就此而言。这可能吗?如果是,怎么办?

最佳答案

最彻底的方法是使用 test私有(private)覆盖send专门阻止对 test 的调用的方法:

class ABC
  def test
     "test"
  end

  private :test

  def display_test
    puts test
  end

  def send(id)
    if id == :test
      raise NoMethodError.new("error")
    else
      super(id)
    end
  end

  alias_method :__send__, :send
end

请注意这个send override 不合适,因为它只接受一个参数。

如果方法正确,将有可能做这样的事情:

ABC.new.send(:send, :test)

关于ruby - 如何在控制台中调用ruby中的某个方法 'disable',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20639857/

相关文章:

Ruby,二进制字符串中的随机字节异或

ruby-on-rails - 如何仅从电子邮件内容中获取文本? Ruby on Rails - 用于 Ruby Gem 的 GMail

arrays - 如何将数组的每个元素压缩到 ruby​​ 中另一个数组的每个元素?

ruby-on-rails - Ruby - 具有不同参数的重试函数

ruby-on-rails - 如何使模块方法可用于常量 Proc 变量? ( ruby )

ruby - 字符编码不兼容错误

ruby - 如何明确地使 ruby​​ rake 中的任务失败?

ruby-on-rails - 事件记录列名称转换为哈希数组

ruby-on-rails - 如何使用私有(private)方法保持 DRY?

ruby-on-rails - heroku run rake db :migrate 错误