вам не нужно вытягивать атрибут «картинка». есть намного более удобный способ, единственное, что вам нужно - это userid, см. пример ниже;
https://graph.facebook.com/user_id/picture?type=large
стр. s. тип определяет размер, который вы хотите
plz, помните, что используя токен с базовыми разрешениями, / me / friends вернут список друзей только с атрибутами id + name
Исключения не должны использоваться для проверки. В основном вы не должны проходить стек для проверки в целом.
Что вы в основном делаете:
X - это верхний уровень и может обрабатывать все. X вызывает Y. Y вызывает Z. Z выполняет проверки и делает что-то после этого, создавая исключение, если проверка не удалась.
Что вы должны делать:
X вызывает Y. Y вызывает V и X. V выполняет проверки и возвращает результат на основании того, была ли вещь действительной. Y не может вызвать X, если V сказал, что вещь недействительна. Y распространяет недействительность или успешный результат на X. X делает то, что он сделал бы с if
/ else
в отношении действительности, а не rescue
.
Но скажем, вы действительно хочу это сделать. Вместо этого вы должны использовать throw
/ catch
:
def validate_date(date)
errors = []
errors << 'Improper format' unless date.match?(/^\d{2}-\d{2}-\d{4}$/)
errors << 'Invalid day' unless date.match?(/^[0-3]\d/)
errors << 'Invalid month' unless date.match?(/-[12]\d-/)
errors << 'Invalid year' unless date.match?(/[12][90]\d{2}$/)
throw(:validation, errors) unless errors.empty?
end
def invoke_validation_and_do_stuff(date)
validate_date(date)
puts "I won't be called unless validation is successful for #{date}"
end
def meaningless_nesting(date)
invoke_validation_and_do_stuff(date)
end
def more_meaningless_nesting(date)
meaningless_nesting(date)
end
def top_level(date)
validation_errors = catch(:validation) do
more_meaningless_nesting(date)
nil
end
if validation_errors
puts validation_errors
else
puts 'Execution successful without errors'
end
end
top_level '20-10-2012'
# I won't be called unless validation is successful for 20-10-2012
# Execution successful without errors
top_level '55-50-2012'
# Invalid day
# Invalid month
Такой концепции не существует на любом языке, о котором я знаю. Вы можете поднять одно исключение последовательно, но не поднимать несколько исключений за один раз, и даже при работе над несколькими потоками для повышения «одновременно» все еще исключение возникает в разных потоках управления.
Когда возникает исключение, поток управления переходит к этому исключению. У вас есть два варианта: сделать что-нибудь об этом или сбой. Третий вариант отсутствует, и отдельный поток управления не появился и продолжается до тех пор, пока это исключение не будет рассмотрено соответствующим образом.
Если вы хотите увидеть несколько сбоев, как указано в комментарии, тогда вы все равно делайте это по одному, как и они будут подняты. Исключение возникает, вы проверяете, регистрируетесь, делаете что угодно, подавляете его и видите следующее, если кто-то поднимается на что-то еще.
Если вы спрашиваете, как можно увеличить несколько необработанных исключений, тогда это действительно не имеет смысла. Сложно спросить, как быть в двух местах одновременно.
Я не думаю, что вы можете сделать несколько исключений, он поднимет первое исключение, которое он найдет, и будет пойман самым внутренним оператором спасения, если несколько существуют или зависят от типа исключения, которое вы поднимаете, и типа спасения
top_level
вы можете посмотреть, есть лиvalidation_errors
ошибка, которую вы знаете как «исправить». Если это так, выполните некоторые действия, которые выполняют «fix». Затем снова вызовитеtop_level
(иначе рекурсия). – ndn 13 July 2018 в 08:05