如何实现 Object.try!在 Ruby on Rails 中



我想像下面这样缩短代码:

content = content.join("n") if content.respond_to? :join

进入这个:

content.try!(:join, "n")

这是一个好主意吗,是否可以在现有Object.try中实施?

如果我

理解正确,您需要一个就地修改对象的try版本,例如x = x.reversex.reverse!之间的区别

回答您的问题...

这是个好主意吗

不,不是,实际上是不可能的。

它可以在现有Object.try方面实施吗?

不,它不能,无论有没有Object.try,它根本无法实现。不能就地更改对象的类型。

对数组使用 .join 会生成一个字符串。不能就地将数组更改为字符串。这就是为什么首先没有join!方法的原因。数组和枚举上的许多方法都有带和不带!的版本。许多其他方法没有!版本。这是因为无法实现!版本。

通常,如果您有像 reverse 这样的方法,并且它是就地等效的reverse!那么您已经可以使用try就可以了:

content.try(:reverse!)

如果!方法尚不存在,例如join和不存在的join!,那是因为它无法工作,并且您无法使其与假设的try!一起使用。


请注意,您可以使用代理对象使这样的东西工作,但对于一个不存在的问题,这是一个可怕的过度解决方案。

只需使用content = content.join("n") if content并完成它。

最新更新