Why word 'translate' is messing irb?

后端 未结 2 739
暖寄归人
暖寄归人 2020-12-21 12:10

I don\'t understand why my method translate undefines start_with? method and is messing something in irb, so I can exit irb only by pressing C

相关标签:
2条回答
  • 2020-12-21 12:43

    Here is a theory

    • There is probably a global function translate in your setup
    • This function is called with an instruction sequence as argument when irb prints the output
    • Hence when you redefine translate printing the output breaks

    The NoMethodError: undefined method does not mean that the method has been undefined globally but that it is being sent to an object that does not understand it

    You can test my theory by executing

    method(:translate)
    

    If you get a result back then translate is already defined and your must not redefine it!

    Now if you want to know which gem defined this function, install pry gem (which is a better irb) and use the $ command to look at the file and source code of that method

    # Use this command in pry to see location and source code
    $ translate
    
    0 讨论(0)
  • 2020-12-21 12:54

    It is a bug in YARV that was fixed in YARV 2.4.0.

    The commit message mentions the following workaround if you don't have YARV 2.4.0:

    class << RubyVM::InstructionSequence
      def translate; end
      undef translate
    end
    

    Note that other implementations are not affected, only YARV.

    0 讨论(0)
提交回复
热议问题