Почему этот код из книги Ruby не работает? - PullRequest
0 голосов
/ 16 мая 2019

Я скопировал это из книги.«Окончательное руководство по программированию на Ruby». Copyright (c) 2006-2016 Satish Talim http://satishtalim.com/

Пожалуйста, ознакомьтесь с кодом и сообщением об ошибке.Почему я получаю эту ошибку?

Я проверил свой набор текста, повторно ввел код, вышел из irb, повторно ввел irb, повторно ввел код, тот же результат.В чем моя ошибка?

irb(main):001:0> 10.times do |num|
irb(main):002:1*   square = num * num
irb(main):003:1>   return num, square
irb(main):004:1> end
Traceback (most recent call last):
        4: from C:/Ruby25-x64/bin/irb.cmd:19:in `<main>'
        3: from (irb):1
        2: from (irb):1:in `times'
        1: from (irb):3:in `block in irb_binding'
LocalJumpError (unexpected return)
irb(main):005:0>

Ответы [ 2 ]

3 голосов
/ 16 мая 2019

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

Код вероятно:

def squared
  10.times do |num|
    square = num * num

    yield num, square
  end
end

Где бы вы назвали это как-то внешне:

squared do |num, square|
  puts "The square of #{num} is #{square}"
end

Упрощенная версия этого кода:

def square(num)
  return num * num
end

Где здесь return находится в допустимом контексте. Ruby стремится избегать явных return операторов , если только не намерено избегать выполнения оставшейся части метода , например:

 def square(num)
   if (num > 1000)
     return "That number is way too big!"
   end

   num * num
 end

Здесь последним оператором для выполнения (num * num) является неявное возвращаемое значение метода. Многие блоки работают таким образом, даже if, где в операторах Ruby if возвращаются значения:

choice = if (num > 10)
  "big"
else
  "small"
end

Где choice заканчивается одной из этих двух строк в зависимости от условий.

0 голосов
/ 16 мая 2019

return используется внутри методов. Вы используете его без одного.

Попробуйте следующее:

def get_my_result
    10.times do |num|
        square=num*num
        return num,square
    end
end

get_my_result()

Примечание: с этим кодом цикл будет выполняться только один раз и вернет значение [0, 0]

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