Я пытаюсь написать несколько общий макет, который может принимать в качестве параметра либо массив строк , либо хэш опций, поэтому вы можете сделать:
option:
- "<li><b>One:</b> This is</li>"
- "<li><b>Two:</b> Raw HTML</li>"
Или вы можете сделать:
option:
One: This is
Two: a mapping
Причина, по которой я хочу поддержать оба этих варианта, заключается в том, что это общедоступный макет, и первый вариант уже поддерживается, но я бы предпочел использовать второй вариант, поэтому я хочу что-то устаревшее период, когда поддерживаются обе версии.
Я видел в проверку, является ли переменная типом строки или массива в жидкости , что есть способ определить, является ли что-то массивом или строкой, но у массивов и хэшей есть атрибут first
! Практическим способом повторного использования этой функции может быть проверка того, имеет ли первый элемент переменной также атрибут first
, например:
{% if site.option.first %}
{% if site.option.first.first %}
hash
{% else %}
array
{% endif %}
{% else %}
Something else!
{% endif %}
Но это кажется немного громоздким и немного хакерским - плюс он даст неправильный ответ, если передаст массив массивов (даже если в этом случае «массив массивов» не считается допустимым вводом). Есть ли лучший способ сделать это?