2016-11-23 15 views
9

powiedzmy mam zmienna i lambda zdefiniowane gdzieśZastosuj lambda do jakiegoś obiektu

phone = "1(234)567-89-01" 
lambda = -> { gsub(/[^0-9]/, '') } 

Jak mogę ubiegać lambda do telefonu, aby uzyskać 12345678901?

P.S. Wiem, że mogę przejść z następującym podejściem:

lambda = -> (arg) { arg.gsub(/[^0-9]/, '') } 
lambda.call(phone) 
#=> "12345678901" 

Ale chcę być lakoniczny.

+0

'-> (arg) {arg}' jest korzystne – fl00r

Odpowiedz

14

Można użyć BasicObject#instance_exec:

phone.instance_exec &lambda 
#=> "12345678901" 
+3

dobre rzeczy @AndreyDeineko i miłą rzeczą jest to, że przyzwyczajenie to zmiana stanu pierwotnego 'telefon '(po exec, phone var to nadal' "1 (234) 567-89-01" ') ... więc aby pracować z nową wartością:' new_phone = phone.instance_exec (& lambda) ' – equivalent8

Powiązane problemy