一, a.rb文件代码如下:
---------------
def say
p "hello"
end
a = 1
a.say
---------------
运行之
a.rb:5: private method `say' called for 1:Fixnum (NoMethodError)
(报错合理,say方法是Object类的私有实例方法)
二, 在irb下运行:
---------------
irb(main):001:0> def say
irb(main):002:1> p "hello"
irb(main):003:1> end
=> nil
irb(main):004:0> a = 1
=> 1
irb(main):005:0> a.say
"hello"
=> nil
---------------
(这里迷惑之,为什么a能调用say方法呢?)
继续运行
irb(main):023:0> puts Object.public_instance_methods.sort
发现say方法竟然在Object公共实例方法里面。
请问有没人能解释一下,irb和正式运行ruby时一些细致的区别
---------------
def say
p "hello"
end
a = 1
a.say
---------------
运行之
a.rb:5: private method `say' called for 1:Fixnum (NoMethodError)
(报错合理,say方法是Object类的私有实例方法)
二, 在irb下运行:
---------------
irb(main):001:0> def say
irb(main):002:1> p "hello"
irb(main):003:1> end
=> nil
irb(main):004:0> a = 1
=> 1
irb(main):005:0> a.say
"hello"
=> nil
---------------
(这里迷惑之,为什么a能调用say方法呢?)
继续运行
irb(main):023:0> puts Object.public_instance_methods.sort
发现say方法竟然在Object公共实例方法里面。
请问有没人能解释一下,irb和正式运行ruby时一些细致的区别
本文探讨了Ruby语言中私有方法say在不同环境下被调用的现象。在a.rb文件中直接运行时报错,而在irb环境中却可以正常执行。通过分析Object类的方法列表,揭示了这一现象背后的原因,并探讨了irb与正式运行Ruby程序之间的区别。
8685

被折叠的 条评论
为什么被折叠?



