LINUX.ORG.RU

ruby: как сделать проще?


0

0

есть кусок кода, который постоянно проверяет файл(pipe) на обновления и выводит результаты на stdout, у меня получилось вот так

matches = log.gets()[0..-2].scan(/^(\w+)\]\[(.+)\]\[(\d+)$/)[0]
if matches != nil
user,file,size=matches
puts user,file,size
else
puts 'cant parse'
end

вопрос: можно написать это более красиво, например совместив как-нибудь проверку с присваниванием.

anonymous

Однострочники плодить собрались? И так перлом повеяло от log.gets()[0..-2].scan(/^(\w+)\]\[(.+)\]\[(\d+)$/)[0]

Лучше над читабельностью поработайте.

anonymous
()

Окей, верх можно разбить на две переменные. Но я имел ввиду немного другое хочется сразу написать:

a,b,c = str.scan(/regexp/)[0]

но если регексп не найден - то это вызовет ошибку. можно как-нибудь красивее это сделать?

anonymous
()
Ответ на: комментарий от anonymous

Нету ошибок.

irb(main):001:0> a,b,c = "qq".scan(/ww/)[0]
=> [nil]
irb(main):002:0> [a,b,c]
=> [nil, nil, nil]

Можно еще сделать что-то вроде
a,b,c = ("qq".match(/ww/) || [0,0,0]).

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.