String#pluralize是幂等的吗?

7
也就是说,对于任何字符串 string,以下内容是否成立?
string.pluralize == string.pluralize.pluralize

2
你尝试过它,发生了什么事? - Don Roby
1
@Don Roby:您的意思是,检查每个可能的字符串吗? - Niklas B.
我的意思是一个合理的集合,就像Ryan Bigg的回答中所说的那样。 - Don Roby
尝试使用“person”。它可能会返回“person” -> “people” -> “peoples”,因为“people”是“person”的合法复数形式。 - Alexander Corwin
2
人不会崩溃。我已将其添加到我的答案中。 - Ryan Bigg
2个回答

6

复数形式在程序中并不具备幂等性。我可以通过一个例子来证明这一点(感谢一位语言极客的Facebook帖子)。

"taxi".pluralize
=> "taxis"
"taxis".pluralize
=> "taxes"
"taxi".pluralize.pluralize
=> "taxes"

因此,“taxi”(驾驶你四处走动的东西)变成了“taxis”(一种安排或命令),最后是“taxes”(正确的“taxis”的复数形式)。我相信还有其他例子,但它们确实很难找到。

我并不想在这个答案上得分或被接受,但我无法将其完美地适应Ryan帖子的评论中。


1
从Rails 5开始(或者更早?),这个反例不再适用。 "taxi".pluralize => "taxis""taxi".pluralize.pluralize => "taxis" - hoffm
如果我想将“taxi”变成复数形式,会发生什么?虽然这可能仍然是正确的做法。 - Marc Talbot

4

我无法想象有哪种情况下不适用。

我刚试了以下单词,第二次的复数形式并没有改变。不过,由于两个原因:1)Rails的复数规则实际上相当愚蠢;2)英语很难,其中一些单词会以有趣的方式“破坏”它们自己。

  • analysis -> analyses -> analysis
  • media -> media -> media
  • news -> news -> news
  • cactii -> cactiis -> cactiis
  • criterion -> criterions -> criterions
  • foot -> foots -> foots
  • loaf -> loafs -> loafs
  • person -> people -> people

“person” 的链是什么?是 “person -> people -> people” 吗? - Niklas B.
1
嗯,这对我来说似乎不太一致。people的复数形式是peoples,而不是people。也许他们实际上强制它具有这个属性。 - Niklas B.
@Mithun:哈哈 :P 我不知怎么地在某个久远的英语课上记住了这句话。 - Niklas B.
1
“taxi”到“taxis”再到“taxes”是一个反例! - Marc Talbot
在Rails的更新版本中,另一个答案中的反例不再适用,因此您可以将其添加到列表中:taxi -> taxis -> taxis。 - hoffm
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接