给定一个数组、单个元素或者 nil,获得一个数组——后两个分别是单个元素数组和空数组。
我误以为露比会这么做:
[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
将返回一个 post 数组、一个 post 或者 nil。当编写处理这个结果的方法时,最容易假设该方法将采用一个数组,该数组可能包含零个、一个或多个元素。示例方法:
current_user.posts.inject(true) {|result, element| result and (element.some_boolean_condition)}