Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.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 - Fatal编程技术网

在ruby中是否有一种就地修改对象的方法?

在ruby中是否有一种就地修改对象的方法?,ruby,Ruby,我找不到允许使用返回值的对象实现的任意方法就地修改对象的方法 我希望做的是 class MyClass def return_modified_my_class_instance ... end end object = MyClass.new object.in_place!(&:return_modified_my_class_instance) 但我对自己实现这一点不感兴趣。我只想在到位的情况下这样做

我找不到允许使用返回值的对象实现的任意方法就地修改对象的方法

我希望做的是

class MyClass
  def return_modified_my_class_instance
    ...
  end
end

object = MyClass.new
object.in_place!(&:return_modified_my_class_instance)

但我对自己实现这一点不感兴趣。我只想在
到位的情况下这样做对象
上存在等价的代码

这是不可能的。修改任何对象的方法只能知道如何操作所有对象共有的状态,而这是无状态

一个可以用新对象替换Ruby中任何对象的方法是不可能的,因为对象引用不能更改Ruby中的类


听起来你是一个Smalltalk程序员,你正在寻找一个与
相当的人:
?这在Ruby中是不可能的。

你能稍微澄清一下吗?到底什么是
object.in_!(&:return\u modified\u my\u class\u instance)
应该怎么做?这是否应该用
对象替换
对象
。返回\u修改的\u我的\u类\u实例
?你在找类似的东西吗?也许一个具体的例子会有所帮助。谢谢你的提问!我很高兴尝试澄清。有一些实例方法返回同一类的新实例(例如ActiveRecord作用域方法),我想调用该方法,如send,然而,我希望该方法修改被调用的对象。onI可以做同样的事情:
which=which.modified\u instance\u of_same\u class
,但是如果它确保保持当前祖先对象的点击,如果有一个
点击,那就更好了将当前实例修改为tap中最后一条语句的返回值的变量