Theia中的inversify
1. 什么是IOC
IoC 英文全称为 Inversion of Control,即控制反转
在代码结构设计中,保证高内聚、低耦合是非常重要的,不仅仅是开发效率,包括后续的代码维护扩展效率都会收到很大的影响,尤其是在大型代码架构中,如果模块间耦合度过高,修改往往是牵一发而动全身。
在面向对象程序设计中,我们在使用一个类功能是要先将类进行实例化,业务庞杂的功能是通过类之间的相互调用相互依赖完成的,在常规的面向对象操作中,我们往往会将依赖对象的实例化工作放在类内进行,但这就违反了单一职责原则—-该类除了本身的职责外,还要负责依赖对象的实例化工作。
而在IOC中,用第三方容器来处理对象的实例化过程。当类需要使用某个对象时,类会自动创建或获取一个实例注入到类当中,这样类与类之间没有了直接...
Theia开发
1. Window.localStorage
Window.localStorage 是一个只读的属性,它允许您访问一个 Document 源(origin)的对象 Storage,存储的数据将保存在浏览器会话中。
Window.localStorage 类似于 Window.sessionStorage,但其区别在于:存储在 localStorage 的数据可以长期保留,而当页面会话结束——也就是说,当页面被关闭时,存储在 sessionStorage 的数据会被清除。
1. 存储位置
Window.localStorage 的存储位置取决于浏览器的实现,一般来说,它会存储在浏览器的缓存目录下,以文件或数据库的形式保存。不同的浏览器可能有不同的存储方式和路径
Chrome ...
TypeScript 高级类型和内置类型
1. 泛型
泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。
泛型通过一对尖括号来表示(<>),尖括号内的字符被称为类型变量,这个变量用来表示类型。
function copy<T>(arg: T): T {
if (typeof arg === 'object') {
return JSON.parse(
JSON.stringify(arg)
)
} else {
return arg
}
}
// 这个类型 T,在没有调用 copy 函数的时候并不确定,只有调用 copy 的时候,我们才知道 T 具体代表什么类型。
const str = copy&...
Clangd-query的使用
1. 什么是clangd-query
clang-query是一个基于libclang库的命令行界面工具,可以在clang抽象语法树的上下文执行查询,帮助用户理解代码的结构
2. clang-query的原理
使用clang-query先通过clang编译源代码,产生一个编译数据库,然后再向clang-query提供这个数据库供以查询
3. clang-query的功能
clang-query可以执行某个表达式的匹配,显示抽象语法树上的节点,设置和获取变量等,支持动态模糊匹配,大大提高了查询的灵活性和匹配的准确性
1. ASTMatcher
ASTMatcher:允许用户编写一个程序来匹配AST节点并能通过访问节点的c++接口来获取该AST节点的属性、源位置等任何信息,其主要由宏...
IPython的使用
1. IPython简介
ipython是一个python的交互式shell,比默认的python shell好用得多,支持变量自动补全,自动缩进,支持bash shell命令,内置了许多很有用的功能和函数。学习ipython将会让我们以一种更高的效率来使用python。同时它也是利用Python进行科学计算和交互可视化的一个最佳的平台
2. IPython功能
运行ipython控制台
使用ipython作为系统shell
使用历史输入(history)
Tab补全
使用%run命令运行脚本
使用%timeit命令快速测量时间
使用%pdb命令快速debug
使用pylab进行交互计算
使用IPython Notebook
3. 安装IPyt...
Clangd的使用
1. 什么是clangd
clangd是llvm项目推出的C++语言服务器,通过LSP(Language Server Protocal)协议向编辑器如vscode/vim/emacs提供语法补全、错误检测、跳转、格式化等等功能。
2. vscode-clangd extension
vscode-clangd extension 是vscode的一个插件
3. 编译clangd
git clone https://github.com/llvm/llvm-project.git
export LLVM_ROOT=llvm_path
export LD_LIBRARY_PATH=gcc-9.3.0/lib64:$LD_LIBRARY_PATH
export PATH=gcc-9.3...
React 知识点
1. 阻止默认行为和事件冒泡
1. preventDefault
preventDefault它是事件对象(Event)的一个方法,作用是取消一个目标元素的默认行为。既然是说默认行为,当然是元素必须有默认行为才能被取消,如果元素本身就没有默认行为,调用当然就无效了。当Event对象的cancelable为false时,表示没有默认行为,这时即使有默认行为,调用 preventDefault也是不会起作用的。
<a href="http://www.cnf2e.com/" id="testA" >cnf2e</a>
var a = document.getElementById("testA");
a.onclick =function(event){
/...
React Hooks
1. Hook
钩子(hook)就是 React 函数组件的副效应解决方案,用来为函数组件引入副效应
1. Hook使用原则
只能在函数最外层调用 Hook。不要在循环、条件判断或者子函数中调用。
只能在 React 的函数组件中调用 Hook。不要在其他Typescript 函数中调用。
2. useState
useState()是改变状态的开关,将状态添加到函数组件需要4个步骤:启用状态、初始化、读取和更新。
每当 React 重新渲染组件时,都会执行useState(initialState)
useState(initialState)的第一个参数是初始状态。返回的数组有两项:当前状态和状态更新函数
使用 setState(newState)来更新状态值。
如果需...
53 post articles, 7 pages.