2011-03-15 16 views
7
numbers = 1..10 
print numbers.map {|x| x*x} 

# I want to do: 
square = {|x| x*x} 
print numbers.map square 

Ponieważ składnia jest bardziej zwięzła. Czy istnieje sposób, aby to zrobić bez konieczności korzystania z def + end?Jak mogę zdefiniować/nazwać blok w Ruby?

+0

Istnieje kilka różnych sposobów na stworzenie blok jako obiekt, z których niektóre są przestarzałe. TIMTOWTDI naprawdę ma zastosowanie tutaj. –

Odpowiedz

13
square = proc {|x| x**2 } 
print number.map(&square) 
+0

Dzięki LBg, co tam robisz? –

+1

'&' przekształć obiekt Proc na bloku do metody. –

1
numbers = 1..10 
square = lambda{|x| x*x } 
numbers.map &square 
8

nie można przypisać do zmiennej bloku gdyż blok nie jest to przedmiotem per se.

Co może zrobić, to przypisać Proc obiekt do zmiennej, a następnie przekonwertować do bloku za pomocą operatora & jednoskładnikowa prefix:

numbers = 1..10 
print numbers.map {|x| x * x } 

square = -> x { x * x } 
print numbers.map &square 
+4

Dla wszystkich, którzy edytowali moją odpowiedź, oraz dla dwóch osób, które zatwierdziły tę zmianę: jeśli nie wiesz, co robisz, po prostu nie rób tego. Nie mam problemu z naprawianiem moich błędów, ale * wprowadzenie * nie jest w porządku. Mój kod działa idealnie, twój nie tylko nie działa, ani nawet * nie parsuje *. –

Powiązane problemy