fn

编写一个自定义事件类,包含on/off/emit/once方法

匿名 (未验证) 提交于 2019-12-02 23:57:01
function Event() { this._events = {}; } Event.prototype.on = function(type, fn) { if (!this._events[type]) { this._events[type] = [] } this._events[type].push(fn); } Event.prototype.off = function(type, fn) { if (!this._events[type]) { return; } if (!fn) { this._events[type] = undefined; return; } var index = this._events[type].indexOf(fn); this._events[type].splice(index, 1); } Event.prototype.emit = function(type) { if (!this._events[type]) { return; } this._events[type].forEach(fn => fn()); } Event.prototype.once = function(type, fn) { var _ = this; var _fn = () => { fn.apply(_, arguments);

Rust中的闭包

匿名 (未验证) 提交于 2019-12-02 23:56:01
这个功能有点高级, 暂时理解不完全, 先把代码练正确吧。 use std :: thread ; use std :: time :: Duration ; struct Cacher < T > where T : Fn ( u32 ) -> u32 { caculation : T , value : Option <u32> , } impl < T > Cacher < T > where T : Fn ( u32 ) -> u32 { fn new ( caculation : T ) -> Cacher < T > { Cacher { caculation , value : None , } } fn value (& mut self , arg : u32 ) -> u32 { match self . value { Some ( v ) => v , None => { let v = ( self . caculation )( arg ); self . value = Some ( v ); v }, } } } fn main () { let simulated_user_specified_value = 6 ; let simulated_random_number = 30 ; generate_workout ( simulated

01背包问题的变体

匿名 (未验证) 提交于 2019-12-02 23:55:01
维克多博士创造了一个裂变反应堆,可取用处于液体状态的放射性物质。反应堆的容量是V加仑。他有N瓶的放射性液体,每个都有一定的质量和一定的体积。当液体倒入反应堆时,也产生一些单位的能量。现在,维克多想要将能量输出最大化。但是,有一个限制条件。他研究了原子元素的物理知识和历史,认识到反应堆内放射性液体的总量不能超过特定的临界质量M,否则反应就会失控,并引发剧烈的爆炸。 写一个算法,帮助他从反应堆获得最大的能量,而不会让他丢掉性命。 该函数/方法的输入包括六个参数―― reactorCap,一个整数,表示反应堆的容量(V); numberOfRadLiquid,一个整数,表示现有小瓶的数量(N); criticalMass,一个整数,表示反应堆的最大临界质量(M); volumes,一个整数列表,按顺序表示N份放射性液体的体积; masses,一个整数列表,按顺序表示N份放射性液体的质量; energies,一个整数列表,按顺序表示N份放射性液体产生的能量。 返回一个整数,表示可在给定的约束条件下从反应堆中产生的最大能量。 1=<numberOfRadLiquid<=10^4 思路:可以用01背包问题的思路进行求解。 关于01背包问题的详细解析,可参考https://blog.csdn.net/mu399/article/details/7722810。 本题的阶梯代码如下: int

nightmare API

匿名 (未验证) 提交于 2019-12-02 23:49:02
nightmare API 简单介绍 2016-04-18 nightmare 文档 可以参考学习。 API 描述 Nightmare(options) 初始化实例,options 为设置 Electron 浏览窗口的配置, 参考文档 waitTimeout (default: 30s) wait 等待最长时间,超过这个时间还未返回,则抛出异常 paths 为 Electron 设置数据路径, 参考文档 switches chrome 的一些配置, 参考文档 以上的 API 均为 nightmare 初始化实例对象的配置,例如我们要配置浏览窗口的大小,如下所示: var nightmare = new Nightmare({ width: 1000, height: 800 show: true }); API 描述 .goto(url) 加载 url 页面 .back() 后退到前一页 .forward() 前进到下一页 .refresh() 刷新当前页 .click(selector) 点击selector元素 .mousedown(selector) 鼠标按下selector元素 .type(selector [, text]) 如果有text参数,则向 selector 输入 text,否则清空 selector , 并触发键盘事件 .insert(selector [,

函数进阶

匿名 (未验证) 提交于 2019-12-02 23:43:01
# 函数的定义: def func ( a , b ): print ( a , b ) return a + b # 函数四个组成部分 # 函数名:调用函数的依据,必须的 # 函数体:执行函数逻辑的,必须的 # 参数列表:为函数内部提供资源,非必须的 # 返回值:将函数执行结果返回给外界,(非必须的) # 返回值:空返回(没有return|空return) | 一值返回 | 多值返回:装有多个值的元组 # 参数列表: # 实参:外界调用函数传入的参数,拥有实际值 # 形参:函数定义时,()中定义用来接受实参的值 # 参数重点一:形参是对实参的值拷贝 ***** ls = [ 1 , 2 , 3 , 4 , 5 ] num = 10 def fn ( arg , n ): arg [ 2 ] = 300 print ( '1:' , arg [ 2 ]) print ( id ( n )) n = 100 print ( id ( n )) fn ( ls , num ) # arg是对ls的值拷贝 print ( '2:' , ls [ 2 ]) print ( id ( num )) # 实参的分类 # 位置实参:按位置对应传递参数,必须出现在关键字实参之前 # 关键字实参:不需要按位置对应传参,用参数名标注为谁传参,必须出现在位置实参之后 # 参数重点二

initcall 宏阅读笔记

匿名 (未验证) 提交于 2019-12-02 23:40:02
linux4.14.39include/linux/module.h 中: #define module_init ( x ) __initcall ( x ); #define module_exit ( x ) __exitcall ( x ); linux4.14.39/include/linux/init.h 中: /* * __initcall中指定的每一个函数指针的名字都是不同的 */ #define __initcall ( fn ) device_initcall ( fn ) /* * 每一个.c文件中只能定义一个 module_exit,因为全部module_exit定义 * 的都是static的同名的函数指针:__exit_call = fn */ #define __exitcall ( fn ) static exitcall_t __exitcall_ ##fn __exit_call = fn linux4.14.39/include/linux/init.h 中: #define pure_initcall ( fn ) __define_initcall ( fn , 0 ) #define core_initcall ( fn ) __define_initcall ( fn , 1 ) #define core_initcall_sync (

mormot支持https

匿名 (未验证) 提交于 2019-12-02 23:03:14
mormot支持https 将ssl证书导入电脑系统,以Windows 10为例: 运行 mmc 证书导入成功后,双击证书,查看证书指纹: 第二项工作:将证书与https绑定: 以管理员身份启动cmd,输入下列命令: netsh http add sslcert ipport=0.0.0.0:443 certhash=3a0a8fa7cbcab141e102eaab457b1299af8f82cc appid={FDC3C336-D4AF-4EA8-BAA2-15536FDE8799} 第三项工作:修改Delphi源程序: program HttpApiServer; {$APPTYPE CONSOLE} {$I Synopse.inc} //['{FDC3C336-D4AF-4EA8-BAA2-15536FDE8799}'] //netsh http add sslcert ipport=0.0.0.0:443 certhash=3a0a8fa7cbcab141e102eaab457b1299af8f82cc appid={FDC3C336-D4AF-4EA8-BAA2-15536FDE8799} //netsh http delete sslcert ipport=0.0.0.0:443 uses {$I SynDprUses.inc} // use FastMM4 on

[Intervention] Unable to preventDefault inside passive event listener due to target being treated as passive. See https://www.chromestatus.com/features/5093566007214080

匿名 (未验证) 提交于 2019-12-02 22:56:40
用touch事件的时候应该遇到过这个东东吧 documet.addEventListener("touchstart",function(){ }); [Violation] Added non-passive event listener to a scroll-blocking ‘touchstart‘ event. Consider marking event handler as ‘passive‘ to make the page more responsive. 翻译过来就是 违反:没有添加被动事件监听器来阻止‘touchstart‘事件,请考虑添加事件管理者‘passive‘,以使页面更加流畅。 出现如上提示这可能是由于console的过滤器选择了Verbose 强迫症的我 上网百度了 一下 于是就有所了解 以前的监听器都是这样的 这里不细说 第三个参数还可以是对象 element.addEventListener("touchstart",fn, { capture: Boolean, passive: Boolean, once: Boolean} 它只有在fn里面的代码执行完之后才会知道到底要不要取消默认行为 这样等待的时间不就 } }); } catch(e){ } 这么看不得劲 挨张图片 我就说在这需要用知道的 就是当访问{} 的 passive 属性的时候

koa2 源码解读 application

故事扮演 提交于 2019-12-02 22:53:37
koa2的源码比较简单,重点解读aplication, 其中context源码比较简单,主要是一些error cookies等,重点可以关注下delegate,delegate模块中,主要通过prototype的方式进行属性的增加。 request和response两个模块都是get set的一些基础api及封装的node原始方法 application 'use strict'; //严格模式 /** * Module dependencies. */ const isGeneratorFunction = require('is-generator-function'); const debug = require('debug')('koa:application'); const onFinished = require('on-finished'); const response = require('./response'); const compose = require('koa-compose'); const isJSON = require('koa-is-json'); const context = require('./context'); const request = require('./request'); const statuses =

python剪切文件

匿名 (未验证) 提交于 2019-12-02 22:51:30
心血来潮,手机上导出的图片全部按日期放在不同文件夹,很是麻烦,想放在一起方便浏览,手动操作费时费力,想到bat命令,不是很熟,看到python欣喜不已,很是方便 递归遍历文件,剪切出来,删除空文件夹 不足:未考虑各种异常 #剪切文件 import os def shear_dile(src,dst): if os.path.isdir(src): if not os.listdir(src): os.rmdir(src) print('移除空目录: ' + src) else : for d in os.listdir(src): shear_dile(os.path.join(src, d),dst) if os.path.isfile(src): print ("文件剪切:",src) fn=os.path.basename(src) if not os.path.exists(dst+'./'+fn): os.rename(src,dst+'./'+fn) shear_dile("H:\\手机图片","D:\\华为手机") 文章来源: python剪切文件