什么"?" 在红宝石意味着什么?

sar*_*unw 3 ruby

我想知道它的真正含义以及如何使用它.

另一个问题是我所看到的断言

assert product.valid? product.errors.full_messages

assert product.valid?
Run Code Online (Sandbox Code Playgroud)

但我找不到那些断言的语法断言(product.errors.full_messages)的第二个arg是什么意思,或者它是arg for?

谢谢

New*_*biZ 11

Ruby使用特定的方法命名约定.它允许您快速识别它们可能具有的副作用或返回类型.

这些约定在方法名称的末尾使用特殊标记,例如" ! "和" ".这种情况并不常见,因为大多数编程语言都倾向于在标识符中禁止使用这些字符,但尽管如此,它确实是方法名称的一部分.(不应与运营商混淆)

  • 修复后" "表示该方法返回一个布尔值.这是替换"is"前缀的便捷方式.(这种惯例也倾向于存在于lisp方言中)
  • 修复后" ! "表示该方法将修改实例,因此不会对复制进行操作.

请注意,这些只是约定.绝对不必遵循它,但它认为是一种很好的做法.

  • 说实话,目的!标记是将方法标记为特殊.它并不一定意味着它具有破坏性或危险性,但这意味着它需要比其替代方案更多的关注.ActiveRecord创建!是非破坏性使用的一个例子. (4认同)
  • 只是为了在这个案例中加上这个帖子'?' 和'!' 实际上是方法名称的一部分而不是运算符. (2认同)
  • 只是补充一点?而且!只是一个惯例,而不是一个要求. (2认同)