Chcę zgnieść w rubin. Znalazłem tę metodę w Ruby na szynach, ale chcę używać jej tylko w Ruby, ponieważ nie używam Ruby na szynach.Jak zgnieść w rubinie
Jak to zrobić w Ruby.
" foo bar \n \t boo".squish # => "foo bar boo"
Chcę zgnieść w rubin. Znalazłem tę metodę w Ruby na szynach, ale chcę używać jej tylko w Ruby, ponieważ nie używam Ruby na szynach.Jak zgnieść w rubinie
Jak to zrobić w Ruby.
" foo bar \n \t boo".squish # => "foo bar boo"
Spróbuj wykonać następujące czynności:
" foo bar \n \t boo".split.join(" ")
# => "foo bar boo"
działa idealnie! –
Z Rails source, który dodaje squish!
do String
:
# File activesupport/lib/active_support/core_ext/string/filters.rb, line 16
def squish!
gsub!(/\A[[:space:]]+/, '')
gsub!(/[[:space:]]+\z/, '')
gsub!(/[[:space:]]+/, ' ')
self
end
>> " foo bar \n \t boo".strip.gsub(/\s+/, ' ')
=> "foo bar boo"
Można to realizować siebie:
def squish
string = strip
string.gsub!(/\s+/, ' ')
string
end
Jest to zmodyfikowana metoda Rails 'squish!
.
widzę żadnego powodu do (re) wdrożyć to i nie używać ActiveSupport, można go używać bez całej Rails:
require 'active_support/core_ext/string/filters'
" foo bar \n \t boo".squish
# => "foo bar baz"
Lub, jeśli naprawdę chcemy uniknąć szynach, można użyć Ruby Facets :
require 'facets/string/squish'
" foo bar \n \t boo".squish
# => "foo bar baz"
Aktualizacja No, może, perfomarmances może być powód. Szybki test porównawczy:
require 'benchmark'
require 'facets/string/squish'
def squish_falsetru(s)
s.strip.gsub(/s+/, ' ')
end
def squish_priti(s)
s.split.join(' ')
end
# ActiveSupport's implementation is not included to avoid
# names clashes with facets' implementation.
# It is also embarrassing slow!
N = 500_000
S = " foo bar \n \t boo"
Benchmark.bm(10) do |x|
x.report('falsetru') { N.times { squish_falsetru(S) } }
x.report('priti') { N.times { squish_priti(S) } }
x.report('facets') { N.times { S.squish } }
end
user system total real
falsetru 1.050000 0.000000 1.050000 ( 1.047549)
priti 0.870000 0.000000 0.870000 ( 0.879500)
facets 2.740000 0.000000 2.740000 ( 2.746178)
Jeśli wiesz dokładnie, czego chcesz, to dlaczego nie spojrzeć na jego źródło? – sawa