我正在尝试编写ruby keep_if和delete_if数组方法的克隆.这是我的代码.
module Strain
def keep
self.inject([]) do |extracts, element|
yield(element) ? extracts << element : extracts
end
end
def discard
self.inject([]) do |extracts, element|
!yield(element) ? extracts << element : extracts
end
end
end
class Array
include Strain
end
Run Code Online (Sandbox Code Playgroud)
这有效.但我想做的事情如下:
def discard
self - self.keep &block
end
Run Code Online (Sandbox Code Playgroud)
期望的行为:
[1, 2, 3].discard { |number| number < 2 }
# => [2, 3]
Run Code Online (Sandbox Code Playgroud)
所以我需要传递传递给discard方法的块,然后传递给keep方法.我该如何实现这一目标?
我运行了以下matlab代码:
rng(1)
matrix_size = 200;
iterations = 100000;
A = rand(matrix_size);
B = rand(matrix_size);
profile on
for i = 1:iterations
A * B;
end
profile off
Run Code Online (Sandbox Code Playgroud)
在我的MacAir(Intel(R)Core(TM)i5-4260U CPU @ 1.40GHz)上,这需要39秒.在具有7核(Intel(R)Xeon(R)CPU E5-2687W v4 @ 3.00GHz)的工作站上,这需要62秒.
我没有说明-singleCompThread.工作站有12个核心,但有5个单线程进程在运行.我(差不多)有7个核心给自己.他们一直都是最大限度的.
怎么会这样?
运行上面的代码时-singleCompThread,它在54s内完成.
我在使用RegExp时遇到Ruby语法高亮问题.
有人建议我用一些额外的代码更新我的Ruby.tmLanguage文件.
问题是,我无法在我的计算机上找到此文件.在sublime_text_3/Packages中我只看到.sublime-package文件,我无法使用sublime文本正确打开; 它只显示数字.
我是否必须自己创建此文件,如果是,那么在哪里?
或者这在sublime text 3中的工作方式不同(相对于2,这可能是此解决方案发布时的最新版本).
参考其他Ruby.tmLanguage代码:https://gist.github.com/elgalu/3921521