ARTS Week16

用户头像
时之虫
关注
发布于: 2020 年 09 月 13 日



Algorithm

子集



将数组的元素连续放到一个队列中,用0和1来表示每个元素是否存在



例如

1 2 3

0 0 0

表示三个元素都不存在,也就是空集 [],



1 2 3

0 0 1

表示三个元素中只有3是存在的,也就是 [3], 一直到。。。



1 2 3

1 1 1

也就是[1, 2, 3]



可以看到,000 到 111 是一组连续的二进制数,所以要求所有的子集,只需生成000到111的对应的集合。



Review

casbin-rbac

[role_definition] 是RBAC角色继承关系的定义。 Casbin 支持 RBAC 系统的多个实例, 例如, 用户可以具有角色及其继承关系, 资源也可以具有角色及其继承关系。 这两个 RBAC 系统不会互相干扰。

实际上,casbin也是通过记录用户角色权限之间的关系来判断是否拥有这个权限的,只不过casbin通过一个rules规则表来记录这个关系,避免了每次都要去重新查询。



Tip

yield 生成器函数看上去就像一个普通函数, 除了不是返回一个值之外, 生成器会根据需求产生更多的值



function getValues() {
return 'value';
}
var_dump(getValues()); // string(5) "value"
function getValues() {
yield 'value';
}
var_dump(getValues()); // class Generator#1 (0) {}



生成器函数的核心是yield关键字。它最简单的调用形式看起来像一个return申明,不同之处在于普通return会返回值并终止函数的执行,而yield会返回一个值给循环调用此生成器的代码并且只是暂停执行生成器函数.



yield的神奇之处还在其他地方

function getValues()
{
$data = [];
echo round(memory_get_usage() / 1024 / 1024, 2) . ' MB' . PHP_EOL;
for ($i = 1; $i < 1000000; $i++) {
$data[] = $i;
if ($i % 200000 == 0) {
echo round(memory_get_usage() / 1024 / 1024, 2) . ' MB' . PHP_EOL;
}
}
return $data;
}
$values = getValues();
foreach ($values as $value) {}



上面的程序输出结果是



1.25 MB
9.26 MB
17.26 MB
33.26 MB
33.26 MB



再来看看用yield的程序

function getValues()
{
echo round(memory_get_usage() / 1024 / 1024, 2) . ' MB' . PHP_EOL;
for ($i = 1; $i < 1000000; $i++) {
yield $i;
if ($i % 200000 == 0) {
echo round(memory_get_usage() / 1024 / 1024, 2) . ' MB' . PHP_EOL;
}
}
}
$values = getValues();
foreach ($values as $value) {}

上面的输出结果是

1.25 MB
1.25 MB
1.25 MB
1.25 MB
1.25 MB

对于一些需要取大集合数据的程序来说,yield无疑是上上之选,避免我们因操作数据太多而导致内存溢出

Share



说走就走的「Windows」—— Windows To Go 制作详解

拥有 Mac 的同学大概都会碰到一个头疼的问题,那就是使用 Windows 的使用需求。macOS 虽好,不过总是会有一些讨厌的软件没有 Mac 版本,这时就不得不在 Mac 上跑 Windows 了。使用虚拟机?它对硬件要求比较高;装 Boot Camp?这对于容量紧张的 Mac 用户来说并不是一个好主意。那还有什么办法在 Mac 上愉快的使用 Windows 呢?这对那些对 Windows 有短暂需求而又不想装 Boot Camp 和虚拟机的 Mac 用户来说可谓非常友好了

用户头像

时之虫

关注

还未添加个人签名 2020.05.25 加入

还未添加个人简介

评论

发布
暂无评论
ARTS Week16