给定一个数组,则单个元素或nil获得一个数组-后两个分别为单个元素数组和一个空数组。
我错误地认为Ruby可以这样工作:
[1,2,3].to_a #= [1,2,3] # Already an array, so no change
1.to_a #= [1] # Creates an array and adds element
nil.to_a #= [] # Creates empty array
但是,您真正得到的是:
[1,2,3].to_a #= [1,2,3] # Hooray
1.to_a #= NoMethodError # Do not want
nil.to_a #= [] # Hooray
因此,要解决此问题,我要么需要使用另一种方法,要么可以通过修改我打算使用的所有类的to_a方法来元程序-这对我来说不是一个选择。
所以一个方法是:
result = nums.class == "Array".constantize ? nums : (nums.class == "NilClass".constantize ? [] : ([]<<nums))
问题是,这有点混乱。是否有一种优雅的方法?(如果这是解决该问题的类似Ruby的方法,我会感到惊讶)
这有什么应用程序?为什么还要转换为数组?
在Rails的ActiveRecord中,调用say user.posts
会返回一组帖子,单个帖子或nil。当编写根据此结果工作的方法时,最容易假设该方法将采用一个数组,该数组可能具有零个,一个或多个元素。示例方法:
current_user.posts.inject(true) {|result, element| result and (element.some_boolean_condition)}
==
不是=
,对吧?
[1,2,3].to_a
并没有返回[[1,2,3]]
!它返回[1,2,3]
。
user.posts
永远不要返回任何帖子。至少我没看过。