Программирование на Ruby: как обрезать IP-адрес?

Для различных целей мне нужно урезать IP-адрес, мне нужно изменить IP-адрес в моей программе с (xx.x.x.x) на (xx.x.x.1), изменив последний номер после финального «.» в строке до значения 1.

Я предполагаю, что это может быть достигнуто либо путем усечения строки с самого конца до конечного ".", и добавления "1" в конец, либо каким-то образом приказав программе изменить значение строки после окончательного "." быть равным 1 - ни один из которых я не знаю, как это сделать.

Я видел различные руководства как по усечению, так и по изменению строк в Ruby, однако ни одно из них, похоже, не охватывает что-то настолько сложное.

Короче, мой вопрос:

- Как изменить значение последнего числа после финального "." в моем IP-адресе на значение 1 (используя любой метод, упомянутый в пункте 2)?

- Потребуется ли для этого изменение класса переменной со string на int и т. д.?

Заранее спасибо.


person user4493605    schedule 14.10.2015    source источник
comment
Что вы пробовали? Кроме того, почему вы хотите 1 в конце? Подсеть обозначается нулем/es в конце.   -  person John Dvorak    schedule 14.10.2015
comment
Я бы использовал регулярное выражение, но поиск последнего индекса точки также должен работать, хотя и менее элегантно.   -  person John Dvorak    schedule 14.10.2015


Ответы (1)


Ruby — это объектно-ориентированный язык, а не строковый или целочисленный язык. Вы должны использовать объекты в своей программе, а не строки или целые числа. (Конечно, если ваши объекты являются строками или целыми числами. Но IP-адрес — это не строка или целое число, это IP-адрес.)

Как только вы переключитесь на использование IP-адресов, ваша проблема станет тривиальной:

require 'ipaddr'

ip = IPAddr.new('12.34.56.78')

(ip & IPAddr.new(255.255.255.0)).succ
# => #<IPAddr: IPv4:12.34.56.1/255.255.255.255>
person Jörg W Mittag    schedule 14.10.2015