智能复数总是智能的?

Posted

技术标签:

【中文标题】智能复数总是智能的?【英文标题】:Intelligent plural always intelligent? 【发布时间】:2012-09-06 23:22:43 【问题描述】:

Ruby on rails 对模型、视图和控制器名称使用单数和复数约定。这非常好,因为可能有一个名为user 的模型和一个名为users 的控制器。这几乎适用于每个单词,例如 user(s)、tree(s)、book(s),因此每个只有 s 的单词构成复数形式。

但是,那些不只需要 s 来构成复数形式的单词,例如以字母“y”结尾的单词呢?例如,城市和城市? Rails 是否知道其中的区别,或者我需要写 citycitys,即使它在语法上是错误的?

【问题讨论】:

【参考方案1】:

Rails 知道很多复数形式。它可以处理“城市”,例如:

1.9.2p318 :001 > "city".pluralize
 => "cities" 
1.9.2p318 :002 > "cities".singular
 => "city"

但是,您可能会发现它不知道并且不会学习的复数形式。请参阅ActiveSupport::Inflector 的文档

Rails 核心团队已经为 inflections 库声明了补丁 将不被接受,以避免破坏遗留应用程序 这可能依赖于错误的变形。如果你发现一个 不正确的屈折变化并在您的应用程序中需要它,您需要 自己更正(解释如下)。

你如何自己纠正它?在config/initializers/inflections.rb。例如:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.plural /^(.*)(l)ens$/i, '\1\2enses'
end

再次查看ActiveSupport::Inflector 的文档,了解更多关于如何教授 Rails 新变形的信息。

【讨论】:

这很好解释!谢谢!【参考方案2】:

对于很多常见的,它知道如何很好地处理它。您可以通过执行以下操作在 IRB 中自己尝试:

require 'active_support/all'
ActiveSupport::Inflector.pluralize("city")

你会得到一个值为“cities”的字符串。您还可以按照config/initializers/inflections.rb中列出的步骤添加和调整变形

【讨论】:

以上是关于智能复数总是智能的?的主要内容,如果未能解决你的问题,请参考以下文章

为啥集合名称总是复数? [复制]

自兴人工智能---认识python语言的基础数据类型和操作

复数,通往真理的最短路径

如何在不混淆字段的情况下声明复数? [复制]

std::accumulate() 仅是复数 std::vector 的实部

自兴人工智能-------------Python入门基础