Я разрабатываю новый формат конфигурации/данных, который будет в YAML. Многие из входов представляют собой значения int/float, с соответствующими единицами (например, литр, кварт, пинта, секунда, минута,...).
Я искал и читал, но все равно не могу понять: как лучше всего связать значение и unit с элементом конфигурации в YAML
Пример: Скажем, у меня есть список из нескольких напитков и (среди прочего), я хочу ввести их объем. Я могу думать о нескольких путях, но (по крайней мере, по-моему) ни один из них не идеален:
-
Требовать, чтобы все значения тома были введены в те же единицы.
Заставляет пользователя самостоятельно выполнять преобразование блока, что является утомительным, подверженным ошибкам и трудным для проверки позже, потому что теперь количество ввода отличается от исходного количества, указанного для напитка. (Напитки поступают из нескольких разных источников, каждый из которых потенциально использует различную единицу измерения.)
-
Представьте значение с последовательностью томов и единиц. Пример:
volume: [ 0.5, Gallons ]
(Отображение будет работать также, хотя и более подробное). Последовательность может быть ОК, но я не уверен, что мне это нравится.
-
Используйте два значения "объем", один для значения, другой для единиц. Пример:
volume_value: 0.5 volume_units: Gallons
Я думаю, что это не стартер. Вербальная, очень свободная ассоциация, подверженная ошибкам.
-
Используйте вместо этого строку и проанализируйте ее в приложении. Пример:
volume: 0.5 Gallons
Проще всего войти, и очень легко написать надежный парсер. Кажется, возможно, это немного взломать, хотя...
-
Теги приложения:
volume: !gallons 0.5
Не уверен в этом, так как я новичок в YAML и еще не очень хорошо разбираюсь в тегах. Синтаксис немного более хрупкий, возможно.
Итак, вопрос в следующем: в спецификации YAML или в наилучшей практике/соглашении defacto, существует ли конкретный способ представления значений + единиц? Является ли это одним из пяти перечисленных мной или чего-то еще, Я надеюсь, что есть "правильный ответ", чтобы оставаться в пределах рекомендаций по сайту.