Ruby如何覆盖ruby sort_by

时间:2016-05-03 14:01:49

标签: ruby

我正在尝试创建一个使用Array data_array = [{project: 'proj', version: '1.1'}, {project: 'proj2', version: '1.11'}, {project: 'proj3', version: '1.2'}] 方法功能的方法。

想象一下,我有这个数据

data_array.natural_sort_by{|x| x[:version] }

我希望能够像这样调用方法:

data_array.sort_by{|x| MyModule.naturalize_str(x[:version]) }

发生的实际调用会达到以下目的:

Array.module_eval do 
  def natural_sort_by(&block)
    sort_by{|x| Rearmed.naturalize_str(eval(block))}
  end
end

这是我目前的工作代码:

char s[5] = {0};
size_t len = 0;
char dest[] = "abcdef.ghi";
char *p = strchr(dest, '.');

if(!p)
{
   // error no '.'
   return;
}

len = strlen(p);
if(len != sizeof(s)-1)
{
    // More or less than 3 characters plus '.'
    return;
}

strcpy(s, p);

我不太清楚如何实现这一点。

2 个答案:

答案 0 :(得分:4)

class Array
  def natural_sort_by
    sort_by{|x| MyModule.naturalize_str(yield(x))}
  end
end

class Array
  def natural_sort_by &block
    sort_by{|x| MyModule.naturalize_str(block.call(x))}
  end
end

答案 1 :(得分:0)

散列键引用的类型不正确。请考虑将此x['version']更改为x[:version]以正确引用:version密钥。