Pergunta

Pergunta rápida.

Como posso testar uma palavra para ver se é singular ou plural?

Eu realmente gostaria:

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

Eu aposto trilhos é capaz!

Graças.

Foi útil?

Solução

Bem, em trilhos, você pode fazer uma comparação string#singularize|#pluralize para retornar um valor verdadeiro ou falso.

Mas eu acho que, devido à natureza da própria linguagem, este pode precisar de algum apoio para fazer ser completamente precisos.

Você poderia fazer algo assim

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

Mas para ver quão preciso, eu corri uma configuração rápida de palavras.

%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

Eu estava um pouco surpreendido, na verdade, uma vez que 'vestido' não se pluralizado corretamente, mas quando se passa pelo #singularize ele é executado em um pouco de um obstáculo.

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

Outras dicas

Na maioria das vezes eu nunca teste para singularidade ou plural, eu só convertê-lo para a forma singular ou plural i exigem.

Em Rails 2.3.x isso era possível, escrever algo como isto

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

Working mais sobre isso, uma função de trabalho é fácil de alimentação:

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

que dá o seguinte resultado:

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

Em Trilhos 4 , com as palavras dadas, agora é muito mais fácil. Você pode apenas fazer

plural_form = org_word.pluralize
singular_form = org_word.singularize

e, portanto, a função torna-se muito mais fácil, bem como:

require 'active_support'

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

Nem rubi nem trilhos vêm com um método específico para testar para "pluralidade" de palavras.

Como nowk disse, o máximo que você pode fazer é implementá-las mesmo, comparando com word.pluralize e word.singularize. Isto lhe dará uma rápida e barata-and-geral-boa maneira de testar. Ele irá falhar algumas vezes, no entanto.

Se precisar de mais precisão, você precisará usar o Rubi Lingüística gem , que pode lidar com vestido e vestidos adequadamente (mas é mais pesado).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top