我正在红宝石店练习实习面试。我期待的工作问题之一是重新实现可枚举的方法。
我现在正在尝试实现地图,但我无法弄清楚如何实现没有给出块的情况。
class Array
def mapp()
out = []
if block_given?
self.each { |e| out << yield(e) }
else
<-- what goes here? -->
end
out
end
end
使用我当前的实现。如果我运行:
[1,2,3,4,5,6].mapp{|each| each+1} #returns => [2,3,4,5,6,7]
但是,我不确定如何获取未传入块的情况:
[1,2,3,4].mapp("cat") # should return => ["cat", "cat", "cat", "cat"]
如果有人能指出我正确的方向。我真的很感激。我尝试查看源代码,但它似乎做的事情与我习惯的完全不同。
static VALUE
enum_flat_map(VALUE obj)
{
VALUE ary;
RETURN_SIZED_ENUMERATOR(obj, 0, 0, enum_size);
ary = rb_ary_new();
rb_block_call(obj, id_each, 0, 0, flat_map_i, ary);
return ary;
}