加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 03:40:53 所属栏目:百科 来源:网络整理
导读:假设我有两种方法的ABC类. class ABC def test "test" end def display_test puts test endend 我只希望能够从我的控制台(IRB)调用ABC.new.display_test(返回’test’)并且无法调用ABC.new.test或ABC.new.send(:test) .这可能吗?如果是这样,怎么样? 解决
假设我有两种方法的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) .这可能吗?如果是这样,怎么样?

解决方法

最彻底的方法是将测试私有并覆盖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

请注意,此发送覆盖不合适,因为它只接受单个参数.

如果以正确的方式完成,就可以做到这样的事情:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读