Я хотел бы затенять ENV
в методе шаблонов, чтобы я мог поднять ошибку, если запрошены ключи, которых нет в реальном ENV
. Очевидно, я не хочу затенять константу в другом месте - только в рамках определенного метода (специфического привязки). Возможно ли это?Затенение константы верхнего уровня в привязке
Объяснитель: - Я знаю о существовании Hash#fetch
, и я использую его все время и всюду. Тем не менее, я хочу использовать это в шаблоне ERB, создавая файл конфигурации. Этот файл конфигурации, вероятно, будет затронут больше людей, чем обычно, и не все знакомы с поведением Ruby, возвращающим nil
для отсутствующего ключа Хэша. Я также работаю над системой, где в последнее время неудачи конфигурации (или неправильные конфигурации или недопонимание формата) вызвали заметные сбои в работе. Ошибки были ошибкой оператора. Поэтому я хотел бы установить соглашение только в пределах этого шаблона, что приведет к повышению. Более того, у меня есть драгоценный камень, strict_env
, который делает это уже, но вы должны помнить, что используете STRICT_ENV
вместо ENV
, и каждый оператор «у вас есть» для этого конкретного рабочего процесса в этом конкретном случае вызывает красный флаг для меня, так как я хочу большей надежности. Я мог бы, конечно, выбрать более строгий язык шаблонов и использовать логику этого языка для повышения (например, Mustache), но так как команда уже знакома с ERB, а Rails поддерживает ERB-templated-YML как жизнеспособный конфигурационный подход (даже хотя вы можете не согласиться с этим) было бы неплохо, если бы я мог придерживаться этого рабочего процесса. Вот почему я хотел бы изменить поведение ENV[]
локально.
Некоторый код поможет. Не могли бы вы описать, как будет использоваться метод шаблонирования? – Stefan
Нет, невозможно затенять константу. Это звучит, как [проблема XY] (http://xyproblem.info/). Вместо того, чтобы спрашивать, как затенять константу, дайте нам более подробную информацию о проблеме, которую вы пытаетесь решить, вместе с кодом, который вы написали до сих пор, и мы можем помочь вам найти лучшее решение. –
То есть, предполагая, что мы используем одно и то же определение «тень» (чтобы определить переменную в локальной области с тем же именем, что и переменная из внешней области, такая, что она затеняет - «бросает тень» - исходная переменная). Опять-таки, некоторый код проделает долгий путь, помогая нам помочь вам. –