代码之家  ›  专栏  ›  技术社区  ›  Justin L.

Ruby中识别方法的惯例的基本原理/历史是什么?

  •  9
  • Justin L.  · 技术社区  · 16 年前

    String#split ,但从来没有 String.split String::split ,因为你可以考虑 #split 在的命名空间中 String #分裂 ).

    我知道这是在ri中识别方法的方式。哪个先来?

    例如,这是为了区分方法和字段吗? 我还听说这有助于区分实例方法和类方法。但这是从哪里开始的?

    2 回复  |  直到 16 年前
        1
  •  8
  •   Mark Rushakoff    16 年前

    类方法 :: 分隔符,指示消息可以发送到类/模块对象,而 实例方法 使用 # 分隔符,指示可以将消息发送到实例对象。

    我要去接电话 Complex 类(在Ruby1.9中)来演示差异。你们两个都有 Complex::rect 和 Complex#rect 复杂::矩形 获取一个实参数和一个虚参数,返回 复杂 ,而 返回实例的实部和虚部的数组。

    ruby-1.9.1-p378 > x = Complex.rect(1,5)
     => (1+5i) 
    ruby-1.9.1-p378 > x.rect
     => [1, 5] 
    ruby-1.9.1-p378 > x.rect(2, 4) # what would this even do?
    ArgumentError: wrong number of arguments(2 for 0)
        from (irb):4:in `rect'
        from (irb):4
        from /Users/mr/.rvm/rubies/ruby-1.9.1-p378/bin/irb:17:in `<main>'
    

    我认为他们不使用 . 因为所有内容的分隔符是,方法属于类还是实例是不明确的。现在我习惯了Ruby这样做,老实说,我认为这是其他语言惯例的一个缺点。

    而且,这是一个完全不相关的话题 领域 因为所有你能发送的信息都是信息,准确地说,即使 就像一个公共领域。当然,最接近字段的是属性或实例变量,它们总是以 @ 而不是 直接地 可从实例外部访问,除非使用继承或 Object#instance_variable_get / _set .

    至于他们为什么选择 和 ? :: #

        2
  •  3
  •   John Feminella    16 年前

    我知道这是在ri中识别方法的方式。哪个先来?

    是的,它就是从这里来的。当你使用 # ,它会自动超链接您的方法,因此文档中对其他方法的引用开始以 # here

    类名、源文件名和任何包含下划线或前面带有哈希字符的方法名都会自动从注释文本超链接到它们的描述。

    但是,实际上不能这样调用方法。但这并不奇怪;毕竟, <cref ...>

    推荐文章