Bug #15597
closedsyscall not returning true from private_method_defined?
Description
syscode
is a private method on Object
but when checked with private_method_defined?
it returns false
.
Ruby 2.6.1
irb(main):001:0> Object.new.private_methods.sort.select { |pm| !Object.private_method_defined?(pm) }
=> [:syscall]
Ruby 2.5.3
irb(main):001:0> Object.new.private_methods.sort.select { |pm| !Object.private_method_defined?(pm) }
=> []
Updated by nobu (Nobuyoshi Nakada) over 5 years ago
- Related to Feature #14944: Support optional inherit argument for Module#method_defined? added
Updated by nobu (Nobuyoshi Nakada) over 5 years ago
- Status changed from Open to Feedback
What is your OS?
Doesn't syscall
method always raise a NotImplementedError
?
Updated by AaronLasseigne (Aaron Lasseigne) over 5 years ago
I'm on MacOS 10.14.3 and yes it does raise a NotImplementedError
. Even so, shouldn't it be shown as a private method?
Updated by Hanmac (Hans Mackowiak) over 5 years ago
@nobu (Nobuyoshi Nakada) : this commit changed it
https://github.com/ruby/ruby/commit/67d87b192b23a75092280b534570580df0f8f7a5
specially this line:
if (me->def->type == VM_METHOD_TYPE_NOTIMPLEMENTED) return METHOD_VISI_UNDEF;
means for each not implemented method, the visibility is undef, and the checks does fail
another question would be if #private_methods
should return such not implemented methods?
Updated by nobu (Nobuyoshi Nakada) over 5 years ago
- Status changed from Feedback to Rejected
It's same as that respond_to?(:syscall, true)
returns false
.
Updated by Hanmac (Hans Mackowiak) over 5 years ago
@nobu (Nobuyoshi Nakada) should we change what the #methods returns? or is that to much work?