Как преобразовать строку в целое в Puppet - PullRequest
1 голос
/ 19 марта 2019

Я пытаюсь преобразовать строку, основанную на времени (час и минуты), в целое число в марионетке.Он работает нормально большую часть времени, за исключением случаев, когда минута меньше 10, скажем, 08. Для этих значений выдается исключение.

Error: Evaluation Error: The value '08' cannot be converted to Numeric. 

Используемый код

$minute_string = Timestamp.new.strftime("%M")
#Tried the following and it did not work
#$minute_integer = $minute_string + 0
#Subsequently, attempted the following but it did not work either
$minute_integer = Integer($minute_string)

Ответы [ 2 ]

4 голосов
/ 19 марта 2019

Это похоже на проблему PUP-6010 . Это было закрыто как "не будет делать", но комментарии дают объяснение и обходной путь.

Вкратце, Puppet использует точно такие же правила для преобразования числовых строк в числа, которые он использует для преобразования числовых литералов, и они включают в себя то, что ведущий 0x направляет интерпретацию как шестнадцатеричное, а в противном случае ведущий 0 направляет интерпретацию как восьмеричное. Некоторые другие языки, такие как Ruby и C, имеют такое же соглашение. Но '8' и '9' не являются действительными восьмеричными цифрами, поэтому строки '08' и '09' не могут быть напрямую преобразованы в целые числа с помощью арифметических операторов или конструктора Integer().

Рекомендуемое решение - использовать функцию scanf для преобразования ваших строк:

$minute_integer = $minute_string.scanf('%d')[0]

При таком формате все цифры будут интерпретироваться как десятичные, а начальные нули не имеют особого значения. Функция возвращает массив, из которого [0], конечно, выбирает элемент с индексом 0.

2 голосов
/ 19 марта 2019

Один из обходных путей - добавить - , который не дополняет его нулями.Но проверяя, сработает ли решение Джона.

$minute_string = Timestamp.new.strftime("%-M") ; notice("Current minute : $minute_string")

Принят ответ Джона

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...