определенный? метод в Ruby и направляющих

Вышеупомянутые методы хороши, если вы хотите избежать библиотеки, но в зависимости от того, будет ли у вас все в порядке с библиотекой, я бы предложил проверить 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, я немного предвзято;)

27
задан Honza 27 October 2008 в 18:55
поделиться

3 ответа

Во-первых: на самом деле, defined? Второй оператор .

: если я понимаю Ваш вопрос правильно, способ сделать это с этой идиомой Ruby:

perex ||= true

Это присвоится верный для perex, если это будет не определено или nil. Это не точно, что делает Ваш пример, так как Ваш не оценивает присвоение, когда значение nil, но если Вы полагаетесь на это тогда, по-моему, не видя его, Вы не пишете код разъединения.

Редактирование : Как отмеченный Honza, оператор выше заменит значение perex, когда это будет false. Тогда я предлагаю следующее для перезаписи минимального количества строк:

perex ||= perex.nil?  # Assign true only when perex is undefined or nil
38
ответ дан Simone 14 October 2019 в 12:43
поделиться

Самый безопасный способ протестировать, если локальное определяется в шаблоне Rails:

local_assigns[:perex]

Это документируется в API направляющих вместе с объяснением, которое defined? не может использоваться из-за ограничения реализации.

24
ответ дан mislav 14 October 2019 в 12:43
поделиться

Согласно ответу Мислава, я искал эту документацию в Rails API и нашел ее в Class ActionView :: Base (под заголовком «Передача локальных переменных в подпрограммы. шаблоны »). Однако вряд ли оно стоило поисков, поскольку в нем почти ничего не говорилось, кроме Мислава. За исключением того, что он рекомендует этот шаблон:

if local_assigns.has_key? :perex
12
ответ дан 28 November 2019 в 04:21
поделиться