Рубиновый синтаксис '=>' - PullRequest
0 голосов
/ 08 июня 2018

Использование => в ruby ​​с хэшами кажется простым:

a = {key1: => value1, key2: => value2}
b = {"key1" => value1, "key2" => value2}

В Ruby используется немного синтаксического сахара.Вот пример блока кода

begin
   [some code]
rescue Exception => e
   [some error handling code]
end

Что именно происходит в линии спасения, особенно между Exception и переменной e с => между ними?rescue - зарезервированное ключевое слово, e - явно переменная.Остальные?Какова функция => в этом случае?

Обновление Кажется, что все упускают точку.Я знаю, что "Rescue Exception => e" не имеет ничего общего с хешами.Я хочу синтаксически узнать, что происходит в этой строке.

Слово «спасение» является зарезервированным словом и входит в рубиновый язык.Я почти уверен, что «e» - это переменная, и она может быть функционально «a», «b» или «c».Что такое «исключение» и «=>»?Есть ли другой способ написать это выражение, чтобы сделать его более понятным для такого парня, как я, который порезал зубы программирования на языках с жестким синтаксисом и без синтаксического сахара?

1 Ответ

0 голосов
/ 08 июня 2018

По умолчанию rescue только спасает RuntimeError, который также является классом по умолчанию для raise без явного объявления класса исключения:

begin
  raise "foo"
rescue
  puts "rescued"
end

Если естьПри необходимости получить доступ к экземпляру исключения можно использовать следующий синтаксис:

begin
  raise "foo"
rescue => e
  puts "rescued #{e.message}"
end

Можно также спасти разные исключения в разных предложениях:

class Error1 < RuntimeError; end
class Error2 < RuntimeError; end

begin
  [some code]
rescue Error1 => e
  puts "rescued an instance of Error1: #{e.message}"
rescue Error2 => e
  puts "rescued an instance of Error2: #{e.message}"
rescue => e # standard RuntimeError
  puts "rescued a generic error: #{e.message}"
end

Тем не менее, этосинтаксис не имеет ничего общего с хешами и используется для различения различных классов исключений во многих rescue блоках.

В вашем примере есть Exception (который не является преемником RuntimeError ине спасено по умолчанию) спасено.Хотя это считается плохой практикой (по причинам, которые здесь слишком малы, чтобы описать их), иногда это все еще полезно.

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