我想像下面这样缩短代码:
content = content.join("n") if content.respond_to? :join
进入这个:
content.try!(:join, "n")
这是一个好主意吗,是否可以在现有Object.try
中实施?
理解正确,您需要一个就地修改对象的try
版本,例如x = x.reverse
和x.reverse!
之间的区别
回答您的问题...
这是个好主意吗
不,不是,实际上是不可能的。
它可以在现有
Object.try
方面实施吗?
不,它不能,无论有没有Object.try
,它根本无法实现。不能就地更改对象的类型。
对数组使用 .join
会生成一个字符串。不能就地将数组更改为字符串。这就是为什么首先没有join!
方法的原因。数组和枚举上的许多方法都有带和不带!
的版本。许多其他方法没有!
版本。这是因为无法实现!
版本。
通常,如果您有像 reverse
这样的方法,并且它是就地等效的reverse!
那么您已经可以使用try
就可以了:
content.try(:reverse!)
如果!
方法尚不存在,例如join
和不存在的join!
,那是因为它无法工作,并且您无法使其与假设的try!
一起使用。
请注意,您可以使用代理对象使这样的东西工作,但对于一个不存在的问题,这是一个可怕的过度解决方案。
只需使用content = content.join("n") if content
并完成它。