2016-11-23 15 views
9

Hãy nói tôi có một biến và lambda định nghĩa ở đâu đóÁp dụng lambda để một số đối tượng

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

Làm thế nào tôi có thể áp dụng lambda vào điện thoại để có được 12345678901?

P.S. Tôi biết tôi có thể thực hiện theo cách tiếp cận sau:

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

Nhưng tôi muốn trở thành người lạc hậu.

+0

'-> (arg) {}' arg là một lợi thế – fl00r

Trả lời

14

Bạn có thể sử dụng BasicObject#instance_exec:

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

thứ tốt @AndreyDeineko, và những điều tốt đẹp về việc này là nó sẽ không thay đổi trạng thái của bản gốc 'điện thoại '(sau khi exec, điện thoại var nó vẫn là' "1 (234) 567-89-01" ') ... do đó, để làm việc với giá trị mới:' new_phone = phone.instance_exec (& lambda) ' – equivalent8

Các vấn đề liên quan