Czuję się trochę nieswojo, aby dodać więcej odpowiedzi tutaj. Postanowili przejść do najbardziej czytelnego i minimalnego podejścia z czystym rubinem, pomijając ładny benchmark z @ ulysse-bn. Podczas gdy tryb :class
jest kopią trybu @ user3869936, :method
, nie widzę tutaj żadnej innej odpowiedzi.
def snake_to_camel_case(str, mode: :class)
case mode
when :class
str.split('_').map(&:capitalize).join
when :method
str.split('_').inject { |m, p| m + p.capitalize }
else
raise "unknown mode #{mode.inspect}"
end
end
Wynik jest:
[28] pry(main)> snake_to_camel_case("asd_dsa_fds", mode: :class)
=> "AsdDsaFds"
[29] pry(main)> snake_to_camel_case("asd_dsa_fds", mode: :method)
=> "asdDsaFds"
Należy dodać, że jest to dodatek do szyn String, to nie działa z czystym Ruby. – iGEL
Jest oznaczony 'ruby-on-rails', więc, jak sądzę, to nie problem. Ale dzięki za wzmiankę. –
Nie musisz wielbłądów przed ustawieniem. Zamiast tego użyj '# classify'. '" some_namespace/module/class_name ".classify =>" SomeNamespace :: Module :: ClassName "' –