我想重新定义 .. 方法
class Fixnum alias _a_ .. def .. i if self > i x = i._a_ self x.to_a.reverse #返回Array else self._a_ i end end end a = 1..5 ; p a.to_a a = 5..1 ; p a.to_a
这样写不对,求指教 ,多谢
这是语法,不是方法
#1 楼 @jjym 如何区分哪些是语法,哪些是方法?求文档
这玩意是 range 字面值吧…… http://www.ruby-doc.org/core-2.0.0/Range.html
查了一下,好像无法定义..和...,但是可以定义 Range,当然,可能不是你要的。。
..
...
class Range alias_method :orig_init, :initialize def initialize(b, e, *args) orig_init(b * 10, e * 10, *args) end end Range.new(1, 2) #=> 10..20 1..2 #=> 1..2
#2 楼 @sevk ..码农的直觉
#4 楼 @ericguo 嗯,多谢
加号可以重定义,就是点点不行。
运算符 一般都可以重定义 , 但是 .. 这东西应该是类似 "string" 5 这种的字面值常量 , 就像:
运算符
"string"
5
"hi" -> new String("hi") 5 -> new Int32(5) 1..5 -> new Range(1,5)
"hi"
new String("hi")
new Int32(5)
1..5
new Range(1,5)
所以可能不能重写~ (码农瞎猜 :P )