Przepraszamy za tytuł, nie wiem, jak nazywa się tę składnię.Dlaczego ten kod nie kompiluje się na Rubim 1.9, ale na rubie 1.8?
Na przykład:
ary = [ [11, [1]], [22, [2, 2]], [33, [3, 3, 3]] ]
# want to get [ [11, 1], [22, 2], [33, 3] ]
Ruby 1,8
ary.map{|x, (y,)| [x, y] }
#=> [[11, 1], [22, 2], [33, 3]]
ary.map{|x, (y)| [x, y] }
#Syntax error, unexpected '|', expecting tCOLON2 or '[' or '.'
#ary.map{|x, (y)| [x, y] }
# ^
Ruby 1,9
ary.map{|x, (y,)| [x, y] }
#SyntaxError: (irb):95: syntax error, unexpected ')'
#ary.map{|x, (y,)| [x, y] }
# ^
ary.map{|x, (y)| [x, y] }
#=> [[11, 1], [22, 2], [33, 3]]
※ Nie pytam o sposób, aby uzyskać żądaną tablicę.
Chciałbym wiedzieć, , dlaczego ten fragment kodu działa, jest jedną z wersji Ruby, ale nie obu.
Jeżeli przecinek spływu było potrzebne w 'Ruby 1.8', to znaczy tam była jakaś reguła, że zniknął? – oldergod
Nie sądzę, że było to potrzebne tak bardzo, jak po stronie problemu. Cała semantyka argumentów blokowych uzyskała ogromny przegląd w wersji 1.9. Opcjonalne argumenty z wartościami domyślnymi i catch-all typu * * args' są teraz obsługiwane. To dziwaczne zachowanie polegające na tym, że nie zezwala się na listę z jednym przedmiotem, ale nie opiekuje się, jeśli drugi rzeczywiście jest wymieniony, zostało usunięte. – tadman