所以我知道bang(感叹号)和non-bang方法之间的区别通常是该方法是修改对象本身还是返回一个单独的修改对象,保持原始对象不变.

然后,在本书第6章构建用户模型时,我遇到了User.create方法,它创建了一个新模型,并在一个步骤中将其保存到数据库中.在迈克尔·哈特尔(Michael Hartl)的Ruby on Rails 3 Tutorial中,他写道User.create!方法"与create方法一样工作……只是如果创建失败,它会引发ActiveRecord::Record-Invalid异常."

我很困惑.是User.create!方法没有遵循Ruby的"bang约定"还是我完全遗漏了什么?如果他遵循惯例,如果是类方法,User.create!如何修改self?

推荐答案

Though a lot of classes treat bang methods as "a method that modifies the object in place", I like the description of bang methods from the Eloquent Ruby book better:

实际上,Ruby程序员会保留

因此,在本例中,"意外"的结果是引发异常,而不是失败并返回false.

Ruby相关问答推荐

这是按引用传递/值传递的误解,导致此方法无法按预期输出吗?

类 SpecificationPolicy 的超类不匹配

将数组转换 for each 元素的嵌套哈希

生成带有小写字母和数字的唯一随机字符串

如何在加载文件时禁用重新定义常量的警告

在Ruby中将嵌套哈希键从CamelCase转换为snake_case

Ruby $:.unshift File.dirname(__FILE__)

在 Ruby 中导出环境变量

如何从 Ruby 中的线程返回值?

如何正确截断表格?

在 Ubuntu 上安装 Ruby 1.9.1?

RSpec: stubbing Kernel::sleep?

用反斜杠单引号替换单引号

Ruby 中的方法: objects与not?

如何在 Ruby 中创建可重用的块/proc/lambda?

ActiveSupport::Memoizable 指的是哪种 Ruby memoize 模式?

如何在数组中找到出现次数最多的项目

如何在 jekyll markdown 博客中包含视频

如何在 Ruby 中使用全局变量或常量值?

class << self vs self.method with Ruby:什么更好?