快速提问。
如何测试一个单词以查看它是单数还是复数?
我真的很喜欢:
test_singularity('word') # => true
test_singularity('words') # => false
我打赌铁路有能力!
感谢。
答案 0 :(得分:20)
在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
答案 1 :(得分: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
答案 2 :(得分:0)
ruby和rails都没有特定的方法来测试单词上的“复数”。
正如nowk所说,你能做的最多就是自己实施,与word.pluralize
和word.singularize
进行比较。这将为您提供快速,廉价且通常良好的测试方式。但它会失败一段时间。
如果你需要更高的精确度,你需要使用Ruby Linguistics gem,它可以正确处理衣服和连衣裙(但它更重)。