簡単な質問です。
単語が単数形か複数形かを調べるにはどうすればよいですか?
私は本当に好きです:
test_singularity('word') # => true
test_singularity('words') # => false
Railsは有能だと思います!
ありがとう。
簡単な質問です。
単語が単数形か複数形かを調べるにはどうすればよいですか?
私は本当に好きです:
test_singularity('word') # => true
test_singularity('words') # => false
Railsは有能だと思います!
ありがとう。
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
ほとんどの場合、単数形または複数形をテストすることはなく、必要な単数形または複数形に変換するだけです。
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
Ruby も Rails も、単語の「複数性」をテストするための特定の方法を備えていません。
word.pluralize
nowk が言ったように、あなたができることのほとんどは、 と を比較して、それらを自分で実装することですword.singularize
。これにより、迅速かつ安価で、一般的に優れたテスト方法が得られます。ただし、何度か失敗します。
もっと精度が必要な場合は、Ruby Linguistics gemを使用する必要があります。これは、ドレスとドレスを適切に処理できます (ただし、より重い)。