【发布时间】:2018-10-08 19:18:24
【问题描述】:
我找不到允许使用返回值的任意方法对象实现就地修改对象的方法。
我希望做的是
class MyClass
def return_modified_my_class_instance
...
end
end
object = MyClass.new
object.in_place!(&:return_modified_my_class_instance)
但我对自己实现这一点不感兴趣。我只想在 ruby 中的 Object 上存在 in_place! 等效项时这样做
【问题讨论】:
-
你能澄清一下吗?
object.in_place!(&:return_modified_my_class_instance)到底应该做什么?这应该用object.return_modified_my_class_instance替换object吗?你在寻找类似Object#tap的东西吗?也许一个具体的例子会有所帮助。 -
感谢您的提问!我很高兴尝试澄清。有一些实例方法返回同一类的新实例(例如 ActiveRecord 范围方法)我想调用该方法,例如在发送中,但是我希望该方法修改正在调用该方法的对象
-
我可以做同样的事情:
whatever = whatever.modified_instance_of_same_class -
但如果它确保保留当前的祖先就更好了
-
Object#tap,如果有tap!变体将当前实例修改为 tap 中最后一条语句的任何返回值
标签: ruby