Это делает работу:
%w{version patchlevel platform}.each{|v| eval "RUBY_#{v.upcase} ||= 'unknown #{v}'"}
но я думаю, что это непрозрачно и неприятно. Я думаю, что ваша оригинальная версия намного лучше. В частности, я думаю, что ||=
с константами в любом случае не очень хорош (поскольку константы не должны быть динамическими), и использование eval
с константами не является стандартным или, следовательно, ожидаемым. На мой взгляд, сложение условного присваивания, констант и eval приводит к плохому сочетанию.