Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将方法附加到ruby中受限上下文中的另一个类_Ruby_Class - Fatal编程技术网

将方法附加到ruby中受限上下文中的另一个类

将方法附加到ruby中受限上下文中的另一个类,ruby,class,Ruby,Class,有可能在有限的区域内将我自己的方法附加到另一个类上吗 如果是这样的话,有谁能给我展示一个更好的实践,或者它应该使用类似于deligate的方法来实现这一点 情况是这样的:在接收、生成和传递类B实例的类A中, 我想在那些bs上附加一些方法,而不让这些新方法在类A之外可以访问。这些方法被调用。您可以向任何对象添加方法,只影响该实例,而不影响创建该实例的整个类 some_object = Whatever.new other_object = Whatever.new class <<

有可能在有限的区域内将我自己的方法附加到另一个类上吗

如果是这样的话,有谁能给我展示一个更好的实践,或者它应该使用类似于
deligate
的方法来实现这一点

情况是这样的:在接收、生成和传递类B实例的类A中, 我想在那些
b
s上附加一些方法,而不让这些新方法在类A之外可以访问。

这些方法被调用。您可以向任何对象添加方法,只影响该实例,而不影响创建该实例的整个类

some_object = Whatever.new
other_object = Whatever.new

class << some_object
  def another_method
    ...
  end
end

some_object.another_method # works
other_object.another_method # error: no such method another_method

还有
instance\u eval
,但你明白了;)

您可以在类B中编写一个私有方法,该方法将对象a作为参数,并使用
实例变量\u get
实例变量\u set
发送
来访问对象中的任何数据。不过这很难看。

谢谢。但单凭这一点仍然无法隐藏这些方法,使其不被外部调用。在将
b
s传递出去之前,对
undef
执行这些方法似乎很乏味,但却是可能的。
some_object.define_singleton_method(:foo) do |arg1, arg2|
  puts "Called with #{arg1} and #{arg2}"
end

some_object.foo(7, 8)