Различное поведение 'upto' в ruby ​​на разных машинах (`upto ': блок не указан (LocalJumpError)) - PullRequest
2 голосов
/ 06 августа 2009

Этот код работает на одном компьютере, но не на другом:

puts 1.upto(5)

На рабочем компьютере код возвращает «#».

На другой машине я получаю эту ошибку:

test.rb: 1: в `upto ': блок не указан (LocalJumpError) из test.rb: 1

Обе машины имеют рельсы 2.2.2. Машина, на которой работает этот код, имеет ruby ​​1.8.7, а две машины, на которых этот код не работает, - ruby ​​1.8.6 и ruby ​​1.8.7 Enterprise Edition соответственно.

Ответы [ 2 ]

4 голосов
/ 06 августа 2009

Да, в ruby ​​1.8.6 получается блок, а в 1.8.7 блок не нужен.

Таким образом, решением является либо обновление до 1.8.7, либо использование блока, либо выполнение 1 ... 4.to_a.

1 голос
/ 07 августа 2009

Чтобы получить поведение 1.8.7+ в 1.8.6, вы можете сделать:

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

, который работает одинаково на всех версиях и функционально эквивалентен 1.upto (5) без блока в 1.8.7+ (хотя и более многословно).

Хотя в этом конкретном случае вы, конечно, можете просто использовать диапазон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...