self v.s. Private method..


#1

請問一下…

ruby 的 self , receiver, private method 的這段的含意指什?(為何要這饒口的定義)

只知道去 call private method 時, self 有規範條件…(在繼承時看到很多討論為何加了/或沒加 self 就會噴錯…)

這個東西可以再講的白話一點嗎???

請大人開示~

謝謝


In Ruby, private methods can’t be called directly with an explicit receiver; self doesn’t get any special treatment here. By definition, when you call self.some_method you are specifying self as the explicit receiver, so Ruby says “No!”


#2

看來是一個會吵架的議題,倒是我之前也沒注意到哈哈,這邊我猜和 Ruby 的內部實作有關

private 最簡單的方式就是"不讓外面的人用",而不讓外面的人用一定會符合一個方式來 call 它,類似

class A
  def yoo
    hoo
    self.hoo
  end
  def moo
    self.send('hoo')
    self.method(:hoo).call
    send('hoo')
    eval('hoo')
  end
  private
    def hoo
      puts 123
    end
end
a = A.new
a.yoo
   #=> 123
   #=> fail
a.moo
   #=> 123
   #=> 123
   #=> 123
   #=> 123
a.hoo
   #=> fail
a.instance_eval{hoo}
   #=> 123

anyway 我會把他當作 spec 的一部份,而不是鑽牛角尖就是了,每個語言都有其特性,你當作特性之一即可


#3

對啊~

就是翻床前書看到~~

看不懂這個的概念是什~~

有什邪惡招式可以用~~

就只有理解 private 的東西~

感謝


#4

細看了一下例子…

self.send(‘hoo’) $ self.method(:hoo).call

也可以突破 private…(指有帶 self…)
也蠻神奇的…

就在 class 內的 method 可以直接呼叫 private method.
要帶 self 就只能用 self.send & self.method 來呼叫…