快问。

如何测试一个单词是单数还是复数?

我真的很想要:

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

我敢打赌 Rails 有能力!

谢谢。

有帮助吗?

解决方案

在rails中,您可以执行 string #singleularize | #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

其他提示

大多数时候我从不测试奇点或复数,我只是将其转换为我需要的单数或复数形式。

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.pluralizeword.singularize. 。这将为您提供一种快速、廉价且总体上良好的测试方法。但有时它会失败。

如果您需要更高的精度,则需要使用 Ruby 语言学宝石, ,可以正确处理礼服和礼服(但比较重)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top