18

簡単な質問です。

単語が単数形か複数形かを調べるにはどうすればよいですか?

私は本当に好きです:

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

Railsは有能だと思います!

ありがとう。

4

3 に答える 3

21

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

'dress' は適切に複数形になるので、実際には少し驚きましたが、#singularize を通過すると、少し問題が発生します。

'dress'.pluralize # => dresses
'dress'.singularize # => dres
于 2009-11-26T05:45:49.253 に答える
9

ほとんどの場合、単数形または複数形をテストすることはなく、必要な単数形または複数形に変換するだけです。

Rails 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

Rails 4では、指定された単語を使用すると、はるかに簡単になりました。あなたはただすることができます

plural_form = org_word.pluralize
singular_form = org_word.singularize

したがって、関数もはるかに簡単になります。

require 'active_support'

def is_singular?(str)
  str.singularize == str
end
于 2009-11-26T10:20:33.840 に答える
1

Ruby も Rails も、単語の「複数性」をテストするための特定の方法を備えていません。

word.pluralizenowk が言ったように、あなたができることのほとんどは、 と を比較して、それらを自分で実装することですword.singularize。これにより、迅速かつ安価で、一般的に優れたテスト方法が得られます。ただし、何度か失敗します。

もっと精度が必要な場合は、Ruby Linguistics gemを使用する必要があります。これは、ドレスとドレスを適切に処理できます (ただし、より重い)。

于 2009-11-26T11:46:30.280 に答える