2009-08-06 2 views
2

Dieser Code auf einer Maschine arbeitet, aber nicht die andere:Different 'bis zu' Verhalten in Ruby auf Differenz Maschinen (`bis ': kein Block gegeben (LocalJumpError))

puts 1.upto(5) 

Auf der Arbeitsmaschine, der Code kehrt zurück '#'.

Auf der anderen Maschine, bekomme ich diesen Fehler:

test.rb: 1: in `bis ': kein Block gegeben (LocalJumpError) von test.rb: 1

Beide Maschinen haben Schienen 2.2.2. Die Maschine, auf der dieser Code läuft, hat Ruby 1.8.7, während die beiden Maschinen, auf denen dieser Code nicht funktioniert, Ruby 1.8.6 und Ruby 1.8.7 Enterprise Edition haben.

Antwort

4

Ja ergibt sich in Ruby 1.8.6 upto erfordert einen Block, während 1.8.7 ein Block ist nicht notwendig.

So Lösung ist entweder auf 1,8,7 oder verwenden Sie einen Block oder tun 1 ... 4.to_a.

+0

Ich würde die Verwendung von 1..4.to_a empfehlen. Ich denke, es zeigt klarer, was Sie tun. –

1

Um das 1.8.7+ Verhalten in 1.8.6 erhalten Sie tun können:

require 'enumerator' 
1.enum_for(:upto, 5) 

, die die gleichen für alle Versionen und ist funktional äquivalent zu 1.upto (5) ohne Block in 1.8 funktioniert. 7+ (obwohl ein wenig mehr wortreich).

In diesem speziellen Fall können Sie natürlich nur einen Bereich verwenden.