irb(main):005:0> class X
irb(main):006:1> def inspect
irb(main):007:2> “hey”
irb(main):008:2> end
irb(main):009:1> end
=> nil
irb(main):010:0> x = X.new.nomethod
NoMethodError: undefined method `nomethod’ for hey:X
from (irb):10
Anyone know how I can get rid of the ‘:X’ after ‘hey’? I’ve tried:
class X
def self.name; ‘’; end
def self.to_s; ‘’; end
def class; ‘’; end
end
Anyone know how I can get rid of the ‘:X’ after ‘hey’? I’ve tried:
class X
def self.name; ‘’; end
def self.to_s; ‘’; end
def class; ‘’; end
end
Where is it getting the class name?
FYI, I decided to just chomp off everything after the ‘for’, so no big
deal. But I still don’t understand where the error message was getting
the class name.
Anyone know how I can get rid of the ‘:X’ after ‘hey’? I’ve tried:
the problem isn’t inspect or anything else to do with X, it is
method_missing. the default method_missing is raising with a message
like:
“undefined method `#{msg}’ for #{self.inspect}:#{self.class}”
But I still don’t understand where the error message was getting
the class name.
Tom, the so-called class path seems to be buried deep inside
unaccessible instance variables of the class. For a workaround use a
“#” as the first character of the inspect result:
class X
def inspect
“#hey”
end
end
X.new.x # => undefined method `x’ for #hey (NoMethodError)
Anyone know how I can get rid of the ‘:X’ after ‘hey’? I’ve tried:
the problem isn’t inspect or anything else to do with X, it is
method_missing. the default method_missing is raising with a message
like:
“undefined method `#{msg}’ for #{self.inspect}:#{self.class}”
^^^^^^^^^^
Which is why I thought I should be able to override #class. And was
surprised that it did not work. Nevertheless…
So you can attack the ‘problem’ at the source:
class Object; def method_missing(*a); raise NoMethodError, “haha!
stupid!”; end; end
=> nil
bork
NoMethodError: haha! stupid!
from (irb):3:in `method_missing’
from (irb):4
That’s a better approach --at least in the case of NoMethodError.
Thanks, Ryan.
T.
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.