ToTenMilan ToTenMilan - 4 years ago 206
Ruby Question

Why word 'translate' is messing irb?

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 Ctrl+d, not
exit
or
quit
:

>> "hello".respond_to?(:start_with?)
=> true
>> def translate(string)
>> if string.start_with?("a", "e", "i", "o", "u")
>> string += "ay"
>> end
>> end
NoMethodError: undefined method `start_with?' for #<RubyVM::InstructionSequence:0x00000001d4c960>
from (irb):3:in `translate'
from /usr/local/rvm/rubies/ruby-2.3.0/bin/irb:11:in `<main>'
>> "hello".respond_to?(:start_with?)
NoMethodError: undefined method `start_with?' for <RubyVM::InstructionSequence:irb_binding@(irb)>:RubyVM::InstructionSequence
from (irb):3:in `translate'
from /usr/local/rvm/rubies/ruby-2.3.0/bin/irb:11:in `<main>'
>> exit
NoMethodError: undefined method `start_with?' for <RubyVM::InstructionSequence:irb_binding@(irb)>:RubyVM::InstructionSequence
from (irb):3:in `translate'
from /usr/local/rvm/rubies/ruby-2.3.0/bin/irb:11:in `<main>'
>> quit
NoMethodError: undefined method `start_with?' for <RubyVM::InstructionSequence:irb_binding@(irb)>:RubyVM::InstructionSequence
from (irb):3:in `translate'
from /usr/local/rvm/rubies/ruby-2.3.0/bin/irb:11:in `<main>'
>>


I tried two different workspaces and effect is the same.
My Ruby and Rails versions are:

~/workspace $ ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]
~/workspace $ rails -v
Rails 4.2.2


from my other question I know that word
translate
is used by many I18N libraries, so it's my only suspect, hence the title of this question. However as a beginner, I don't see any relation.

Answer Source

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.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download