Странное поведение функции lpad Джулии и интерполяции строк - PullRequest
0 голосов
/ 30 сентября 2018

Следующий код удивил меня:

julia> for person in 1:12
           println("person is $(lpad(2, person))")
       end
person is 2
person is  2
person is   2
person is    2
person is     2
person is      2
person is       2
person is        2
person is         2
person is          2
person is           2
person is            2

Это казалось совершенно загадочным, пока я не понял, что ввел аргументы для функции lpad в обратном порядке.Это исправило это:

julia> for person in 1:12
           println("person is $(lpad(person, 2))")
        end
person is  1
person is  2
person is  3
person is  4
person is  5
person is  6
person is  7
person is  8
person is  9
person is 10
person is 11
person is 12

Однако должно быть что-то, что я не получаю о lpad и неожиданном выводе.

Ниже приведена сигнатура функции lpad в документы :

lpad(s, n::Integer, p::Union{AbstractChar,AbstractString}=' ') -> String

Есть предложения относительно того, что происходит?

1 Ответ

0 голосов
/ 30 сентября 2018

Ваш счетчик цикла по какой-то причине называется "человек".Таким образом, он переходит от 1 до 12.

Из функции docs второй аргумент определяет количество отступов слева для напечатанного первого аргумента:

lpad(s, n::Integer, p::Union{AbstractChar,AbstractString}=' ') -> String

Stringify s and pad the resulting string on the left with p to make
it n characters (code points) long. If s is already n characters long,
an equal string is returned. Pad with spaces by default.

Таким образом, ваш счетчик цикла это person иэто также число пробелов, напечатанных перед '2' в каждой строке вывода в первой версии.

...