Can I override `.<digit>` to point at an index for an array?

匆匆过客 提交于 2019-12-23 04:24:07

问题


.<digit> means to interpret the number as a float instead of an integer.

Can I override .<digit> to let it point the index in an array so that the following will work?

c = [1, 2, 3, 4, 5, 6]
c.0 # => 1
c.3 # => 4

回答1:


No. A method name can't begin with a number in Ruby. More about Ruby method names restrictions here.




回答2:


No you can't. That is part of the literal expression for floats. It is not a method call. It is not done at Ruby syntax level.




回答3:


As the other answers already told, it is not possible to override the number as method, but you can use parenthesis for an empty method.

class Array
  def method_missing(m ,*args, &block)
    # m will be 'call'
    self[args[0]] if args[0].is_a?(Fixnum)
  end
end


irb(main):009:0> [1,2,3,4,5].(0)
=> 1
irb(main):010:0> [1,2,3,4,5].(2)
=> 3


来源:https://stackoverflow.com/questions/37067744/can-i-override-digit-to-point-at-an-index-for-an-array

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!