Оператор AND для доступа к файлам в Ruby - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь написать функцию, которая принимает две строки и возвращает их операцию AND.

Например, с правами доступа к файлам 755 и 664 должно возвращаться 644.

def compareBits(desired, existing)
    return desired.to_i(2) & existing.to_i(2)

end

compareBits('0755', '0664')

Чего мне не хватает?

1 Ответ

0 голосов
/ 02 октября 2018

Строки вашего режима ('0755' и '0664') восьмеричные, но вызов to_i(2) обрабатывает их как двоичные, вы хотите вызвать #to_i с аргументом base, равным восьми.Вы также дважды вызываете to_i для desired вместо вызова обоих аргументов:

def compareBits(desired, existing)
  desired.to_i(8) & existing.to_i(8)
end

Это даст вам числовой результат.Если вам нужна восьмеричная строка, добавьте to_s(8) call:

def compareBits(desired, existing)
  (desired.to_i(8) & existing.to_i(8)).to_s(8)
end
...