Вышеупомянутые методы хороши, если вы хотите избежать библиотеки, но в зависимости от того, будет ли у вас все в порядке с библиотекой, я бы предложил проверить Chance для генерации случайных вещей в JavaScript.
В частности, для решения вашего вопроса, используя Chance, это так же просто, как:
// One line!
var uniques = chance.unique(chance.natural, 8, {min: 1, max: 100});
// Print it out to the document for this snippet so we can see it in action
document.write(JSON.stringify(uniques));
Отказ от ответственности, as автор Chance, я немного предвзято;)
Во-первых: на самом деле, defined?
Второй оператор .
: если я понимаю Ваш вопрос правильно, способ сделать это с этой идиомой Ruby:
perex ||= true
Это присвоится верный для perex
, если это будет не определено или nil
. Это не точно, что делает Ваш пример, так как Ваш не оценивает присвоение, когда значение nil
, но если Вы полагаетесь на это тогда, по-моему, не видя его, Вы не пишете код разъединения.
Редактирование : Как отмеченный Honza, оператор выше заменит значение perex
, когда это будет false
. Тогда я предлагаю следующее для перезаписи минимального количества строк:
perex ||= perex.nil? # Assign true only when perex is undefined or nil
Самый безопасный способ протестировать, если локальное определяется в шаблоне Rails:
local_assigns[:perex]
Это документируется в API направляющих вместе с объяснением, которое defined?
не может использоваться из-за ограничения реализации.
Согласно ответу Мислава, я искал эту документацию в Rails API и нашел ее в Class ActionView :: Base (под заголовком «Передача локальных переменных в подпрограммы. шаблоны »). Однако вряд ли оно стоило поисков, поскольку в нем почти ничего не говорилось, кроме Мислава. За исключением того, что он рекомендует этот шаблон:
if local_assigns.has_key? :perex