2013-05-18 16 views

Odpowiedz

15

Są to metody jednoargumentowe: + i -. Są one wywoływane podczas pisania -object lub +object. Składnia +x została na przykład zastąpiona przez [email protected].

Rozważ to:

class Foo 
    def +(other_foo) 
    puts 'binary +' 
    end 

    def [email protected] 
    puts 'unary +' 
    end 
end 

f = Foo.new 
g = Foo.new 

+ f 
# unary + 

f + g 
# binary + 

f + (+ g) 
# unary + 
# binary + 

Innym mniej wymyślony przykład:

class Array 
    def [email protected] 
    map(&:[email protected]) 
    end 
end 

- [1, 2, -3] 
# => [-1, -2, 3] 

Są one wymienione here a tam artykuł o tym, jak je here zdefiniowania.

+0

'[] + []' lub '[] + ([])' po tej definicji nie zwraca błąd. – sawa

+2

@sawa: To dlatego, że 'Array' już jest dostarczany z binarną metodą' + '. – hammar

+0

@sawa Jakiego błędu oczekujesz? – toro2k

Powiązane problemy