使用数组#select和辅助方法不起作用?

时间:2015-07-27 20:58:41

标签: ruby

no_repeat?方法是检查范围中的任何年份是否具有重复数字。我将它与def no_repeats(year_start, year_end) no_repeat_years = [year_start..year_end].select { |year| no_repeat?(year) } end def no_repeat?(year) numbers = year.split("") numbers.each do |n| if numbers.count(n) > 1 return false end end return true end 方法配对,检查个别年份。

no_repeats

当我尝试运行undefined method `split' for 1980..2000:Range (NoMethodError) 时,我收到以下错误:

/**
 * This is a description
 * @module someModule
 */
(function (exports) {

    /**
     * Returns true if something.
     * @param {String} type
     * @returns {boolean}
     * @static
     */
    var isSomething = function isSomething(type){
        return true;
    };

    exports.isSomething = isSomething;

})(
    //if exports exists, this is a node.js environment so attach public interface to the `exports` object
    //otherwise, fallback to attaching public interface to the `window` object
    (typeof exports === 'undefined') ?
         window
        : exports
);

为什么整个范围都会插入辅助功能?

1 个答案:

答案 0 :(得分:2)

在第三行,您有[year_start..year_end]。这不是你想要的。这样做是因为它创建了一个包含1个元素的数组:你的范围。所以这就等同于:

years = year_start..year_end
value = [years]
value.select do |year|
  year.class # => Range
end

因此,您应该[year_start..year_end]而不是(year_start..year_end)。这不会创建数组,而是优先考虑范围,因此它仍然可以按预期工作(即#select方法将在范围而不是year_end上调用。)