给定一个数组、单个元素或 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 中,调用 sayuser.posts
将返回一个帖子数组、单个帖子或 nil。在编写处理其结果的方法时,最容易假设该方法将采用一个数组,该数组可能有零个、一个或多个元素。示例方法:
current_user.posts.inject(true) {|result, element| result and (element.some_boolean_condition)}