Witam,
trafiłem na dość dziwne zachowanie języka ruby. Przykładowo, mam metodę, która jako argument przyjmuje łańcuch znaków i w efekcie zwraca nowy łańcuch znaków.
irb(main):001:0> a = 'witaj jak sie masz'
=> "witaj jak sie masz"
irb(main):002:0> def test input
irb(main):003:1> b = input
irb(main):004:1> b.gsub!('witaj', 'dupeczko')
irb(main):005:1> end
=> nil
irb(main):006:0> test a
=> "dupeczko jak sie masz"
irb(main):007:0> a
=> "dupeczko jak sie masz"
irb(main):008:0>
Dlaczego gsub! przetworzył również wartość zmiennej w parametrze ?
def test(input)
input.gsub('foo', 'bar')
end
w rubym zazwyczaj zaleca się używania metod bez !, zwracają one zmienioną wartość zamiast zmieniania “w miejscu” co pozwala uniknąć takich właśnie błędów
jeżeli już musisz użyć gsub! (tylko dlaczego? :D) to:
def test(input)
b = input.dup
b.gsub!('foo', 'bar')
end
Wiem na czym polega różnica, pytanie czy coś takiego powinno być dopuszczalne. Może zgłosić gdzieś ten błąd ?
Teoretycznie może naruszyć bezpieczeństwo aplikacji.
[quote=exage]Wiem na czym polega różnica, pytanie czy coś takiego powinno być dopuszczalne. Może zgłosić gdzieś ten błąd ?
Teoretycznie może naruszyć bezpieczeństwo aplikacji.[/quote]
Facepalm I’m dead Przeczytaj dokumentację.