gpt4 book ai didi

ruby - 为什么会存在 Ruby 模块内核?

转载 作者:数据小太阳 更新时间:2023-10-29 07:05:31 37 4
gpt4 key购买 nike

Ruby 中的面向对象设计 一书中,Sandi Metz 说模块的主要用途是用它们实现鸭子类型,并将它们包含在每个需要的类中。为什么 Ruby Kernel 是包含在 Object 中的模块?据我所知,它没有在其他任何地方使用。使用模块有什么意义?

最佳答案

理想情况下,

  • Methods in spirit(适用于任何对象),即使用接收器的方法,应在 Object 上定义上课,而
  • Procedures(全局提供),即忽略接收者的方法,应该收集在Kernel中模块。

Kernel#puts ,例如不对其接收者做任何事情;它不调用它的私有(private)方法,它不访问它的任何实例变量,它只作用于它的参数。

Ruby 中的过程是通过使用 Ruby 的特征伪造的,即接收者等于 self可以省略。它们也经常被设为私有(private),以防止它们被显式接收者调用,从而更加困惑。例如,"Hello".putsputs 后将打印一个换行符而不是其他任何内容只关心它的参数,而不关心它的接收者。通过将其设为私有(private),它只能被称为 puts "Hello" .

实际上,由于 Ruby 的悠久历史,并不总是严格遵循这种分离。由于一些 Kernel方法记录在 Object 中反之亦然,甚至更进一步的事实是,当您定义一些看起来 像全局过程的东西时,根据上述推理,它应该最终在 Kernel 中结束。 ,它实际上以私有(private)实例方法结束 Object .

关于ruby - 为什么会存在 Ruby 模块内核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38289634/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com