Ruby on rails 处理零和#x27;红宝石
在nil对象上使用map方法时出错。例如:Ruby on rails 处理零和#x27;红宝石,ruby-on-rails,ruby,null,Ruby On Rails,Ruby,Null,在nil对象上使用map方法时出错。例如: x = nil x.map{ |e| e} 有没有比书写更好的方法来处理这个问题: x.map{ |e| e} unless x.nil? (我希望输出为nil。)将nil转换为Array可以避免错误,但最终会得到一个空数组而不是nil 2.1.2 :001 > x = nil => nil 2.1.2 :002 > Array(x).map { |e| e } => [] 使用&&,将执行第二个表达式,除非x为nil
x = nil
x.map{ |e| e}
有没有比书写更好的方法来处理这个问题:
x.map{ |e| e} unless x.nil?
(我希望输出为nil。)将
nil
转换为Array
可以避免错误,但最终会得到一个空数组而不是nil
2.1.2 :001 > x = nil
=> nil
2.1.2 :002 > Array(x).map { |e| e }
=> []
使用
&&
,将执行第二个表达式,除非x
为nil
或false
x = nil
x && x.map { |e| e}
# => nil
因为您使用的是rails,所以可以使用,如果对象是
nil
,则它总是返回nil
:
x = [1,2,3]
x.try :map, &->(e) { e+1 }
# => [2, 3, 4]
x = nil
x.try :map, &->(e) { e+1 }
# => nil
与@Doester的解决方案相比,我更喜欢这一点,但它是相似的:
[*x].map { |e| e }
试试这个
x ? x.map {|e| e } : nil
输出
x = nil # => nil
x = false # => nil
x= ['cat', 'hat'] # => ['cat', 'hat']
nil
从哪里来?您是否可以将使nil
变为空集合?您想在这里实现什么<代码>映射函数只能用于具有值集合的对象,如数组
、可枚举
、惰性
序列、向量
等。如果您只想检查nil值,那么您所拥有的是一个很好的方法每当您有一个涉及错误的问题时,请复制异常消息(通常省略堆栈跟踪)并报告引发异常的行。在许多情况下,这条信息会指出问题所在。我敢肯定你得到了,NoMethodError:undefined方法'map'用于nil:NilClass
,这说明了一切。或者x.to_a.map
@MichaelBerkowski有一个很好的理由使用Array()
而不是\u a
Array()
更健壮,因为大多数对象都没有定义#to_a
,但是Array()
几乎可以处理任何对象。我很欣赏这个答案,尽管我最终选择了另一个答案。如果x
不是nil
,那该怎么办?如果x
是ie.0
NoMethodError:undefined method
map'对于0:Fixnum`@yeyo,问题的标题明确提到nil
。除了nil
、false
之外的值在Ruby中都是真实值。您的答案是正确的,非常优雅。我只是有点担心,因为只要x
是nil
,false
或Iterable对象,这种方法就可以工作;恐怕有些东西很容易忘记。哇,这里发生了很多事情,但我想这正是我需要的。它似乎是:beginrescue nil end的一个简短版本。事实上,我已经用过那个长版本好几次了。我必须了解“刺客兰达斯”以及他们与“&”的关系,但这是非常值得的。我的问题实际上是rails,因为在创建网页时会弹出很多基于零的异常。谢谢您,先生,祝您愉快。