我在这里主要讨论的是 Python,但我想这可能适用于大多数语言。如果我有一个可变对象,那么让就地操作也返回该对象是一个坏主意吗?似乎大多数示例只是修改对象并返回None
。例如,list.sort
.
是的,这是一个坏主意。原因是,如果就地操作和非就地操作具有明显相同的输出,那么程序员会经常混淆就地操作和非就地操作(List.sort()
vs. sorted()
),这会导致难以检测的错误。
返回自身的就地操作可以允许您执行“方法链接”,但是,这是不好的做法,因为您可能会意外地将具有副作用的函数埋藏在链的中间。
为了防止这样的错误,方法链应该只有一个有副作用的方法,并且该函数应该位于链的末尾。链中之前的函数应该转换输入而没有副作用(例如,导航树、切片字符串等)。如果就地操作返回自身,那么程序员必然会意外地使用它来代替返回副本的替代函数,因此没有副作用(同样,List.sort()
vs. sorted()
)这可能会导致难以调试的错误。
这就是 Python 标准库函数总是返回副本或返回的原因None
并就地修改对象,但绝不就地修改对象并返回自身。其他 Python 库(例如 Django)也遵循这种做法(请参阅这个非常相似的问题 https://stackoverflow.com/questions/10936737/why-does-django-orms-save-method-not-return-the-saved-object/10936874关于姜戈)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)