Я думаю, вы, вероятно, проверяете вывод функции, верно?
У вас есть что-то вроде
remove('1q')
=> nil
Это потому, что метод remove
ничего не возвращаетесли места не найденоПросто убедитесь, что вы вернули измененное значение.
def remove(x)
if x.include? " "
x.gsub!(/ /,"")
end
x # this is the last executed command and so will be the return value of the method
end
И теперь вы увидите
remove('1q')
=> "1q"
Обратите внимание, что ваш метод фактически мутирует объект, поэтому вам не нужнопроверить, что возвращено, вы можете просто проверить переменную с исходным значением.Do ...
test_value = 'My carrot'
remove(test_value)
p test_value
=> "Mycarrot"
Наконец, как уже указывалось, вам не нужно заключать его в предложение if
, gsub!
будет работать только на любых пробелах, которые он найдет и будетв противном случае ничего не делать.
def remove(x)
x.gsub!(' ', '')
x
end
Обратите внимание, что вам по-прежнему нужно возвращать переменную x
, как будто gsub!
ничего не делает, возвращает nil
Метод gsub
(с другой стороны) не изменяется, он всегда будет возвращать новое значение, которое будет строкой с любыми сделанными заменами, поэтому вы можете сделать
def remove(x)
x.gsub(' ','')
end
И это всегда будет возвращать значение независимо от того,произошла замена ... но исходный объект не изменится.(Возвращаемое значение будет иметь другое значение object_id
)