Проверьте, является ли слово единственным или множественным числом в Ruby on Rails

быстрый вопрос.

Как я могу проверить слово, чтобы увидеть, является ли оно единственным или множественным числом?

Мне бы очень хотелось:

test_singularity('word') # => true
test_singularity('words') # => false

держу пари, rails способен!

спасибо.

3 ответов


Ну в rails, вы можете сделать string#singularize|#pluralize сравнение для возврата значения true или false.

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

вы могли бы сделать что-то подобное

def test_singularity(str)
  str.pluralize != str && str.singularize == str
end

но чтобы увидеть, насколько точно, я пробежал быстрый набор слов.

%w(word words rail rails dress dresses).each do |v|
  puts "#{v} : #{test_singularity(v)}"
end

word : true
words : false
rail : true
rails : false
dress : false
dresses : false

Я был немного удивлен на самом деле, так как "платье" получает множественное число должным образом, но когда он проходит через # singularize он сталкивается с небольшой проблемой.

'dress'.pluralize # => dresses
'dress'.singularize # => dres

в большинстве случаев я никогда не проверяю сингулярность или множественное число, я просто преобразую его в единственную или множественную форму, которую я требую.

на рельсы 2.3.x это было возможно, написать что-то вроде этого

plural_form = org_word.singularize.pluralize
singular_form = org_word.pluralize.singularize

дальнейшая работа над этой работой легко к поставке:

require 'active_support'

def is_singular?(str)
  str.pluralize.singularize == str
end


%w(word words rail rails dress dresses).each do |v|
  puts "#{v} : #{is_singular?(v)}"
end

который дает следующий вывод:

word : true
words : false
rail : true
rails : false
dress : true
dresses : false

на рельсы 4, С данными словами, теперь намного проще. Ты можешь просто do

plural_form = org_word.pluralize
singular_form = org_word.singularize

и, таким образом, функция становится намного проще:

require 'active_support'

def is_singular?(str)
  str.singularize == str
end

ни ruby, ни rails не имеют конкретного метода тестирования для "множественности" слов.

Как сказал новк, самое большее, что вы можете сделать, это реализовать их самостоятельно, по сравнению с word.pluralize и word.singularize. Это даст вам быстрый и дешевый и в целом хороший способ тестирования. Но иногда это не удается.

Если вам нужна больше точности, то вам будет нужно использовать Рубин Лингвистика gem, который может иметь дело с платьем и платьями должным образом (но это более тяжелый.)