ルビーショップでインターンシップ面接の練習中です。私が期待している仕事の質問の 1 つは、列挙可能なメソッドを再実装することです。
現在マップを実装しようとしていますが、ブロックが指定されていない場合の実装方法がわかりません。
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;
}