puts 方法在模塊 Kernel 中被定義為私有。所以沒有人可以執行其他物件放置 - 這很清楚。但是為什么盡管 self 和 slf 具有相同的 ID,但下面的示例卻沒有運行?它們不是同一個物件嗎?
>> slf = self
>> slf.puts
(irb):206:in `<main>': private method `puts' called for main:Object (NoMethodError)
from C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/irb-1.3.5/exe/irb:11:in `<top (required)>'
from C:/Ruby30-x64/bin/irb:25:in `load'
from C:/Ruby30-x64/bin/irb:25:in `<main>'
>> p self.object_id
320
>> p slf.object_id
320
uj5u.com熱心網友回復:
Ruby 中的私有方法只能通過無接收器訊息發送呼叫,即self作為隱式接收器,或使用文字偽變數self作為顯式接收器。
IOW,允許的兩種方式是
foo(args)和self.foo(args).
在您的示例中,您正在發送一條訊息,其中接收方是區域變數slf,即既不是隱式也不是文字偽變數self,因此,不允許呼叫私有方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/351139.html
