Ruby on rails 处理零和#x27;红宝石

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

在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
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对象,这种方法就可以工作;恐怕有些东西很容易忘记。哇,这里发生了很多事情,但我想这正是我需要的。它似乎是:begin
rescue nil end的一个简短版本。事实上,我已经用过那个长版本好几次了。我必须了解“刺客兰达斯”以及他们与“&”的关系,但这是非常值得的。我的问题实际上是rails,因为在创建网页时会弹出很多基于零的异常。谢谢您,先生,祝您愉快。