我想缩短,如下面的代码:如何实现Object.try!在Ruby on Rails中?
content = content.join("\n") if content.respond_to? :join
到这一点:
content.try!(:join, "\n")
这是一个好主意,它可以在现有Object.try
方面来实现?
我想缩短,如下面的代码:如何实现Object.try!在Ruby on Rails中?
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!
方法的原因。 Array和Enumerable上的许多方法的版本有和没有!
。许多其他方法没有!
版本。这是因为!
版本无法实现。
一般来说,如果你有一个像reverse
的方法,它是就地相当于reverse!
你已经可以使用try
就好:
content.try(:reverse!)
如果!
方法已经不存在,如join
和不存在的join!
,这是因为它不能工作,并且不能使它与假设的try!
一起工作。
注意,你可以做的东西像与代理对象这项工作,但是这是一个可怕的过度紧张的解决方案,不存在问题。
只需使用content = content.join("\n") if content
并完成它。
如果你想抛出一个异常时,它失败了,怎么样'content.join“\ n”'?... –
您还没有解释什么'试试!'呢。我们应该如何告诉你这是个好主意还是如何实施? – meagar
@BradWerth我不认为意图是抛出一个异常... – meagar