- Objective-C语言的学习路线
AI向前看
包罗万象golang开发语言后端
Objective-C语言的学习路线在程序开发的历史长河中,Objective-C作为一种继承自C语言与Smalltalk的编程语言,扮演着重要的角色。虽然随着Swift语言的出现,Objective-C的使用有所减少,但它依然是iOS和macOS应用开发的重要基础,许多现有的大型应用程序仍然在使用它。因此,学习Objective-C,不仅能帮助我们理解更古老的代码库,还能加深我们对面向对象编程的
- vue中MVVM实现原理
danniyedan
httpshtmlc++
往页面中添加数据,从传统的dom操作,改变成数据层操作。不需要关注dom层操作,专注于操作数据,数据是什么,页面就显示什么。最常用的是用vue-cli脚手架的方式来创建一个项目。它是以一种单文件组件的方式,即为.vue文件,它里面包含了模板、业务逻辑和样式。响应式数据绑定,当数据(model层)发生改变,它会自动更新视图(view),内部实现原理是利用Es5中的Object.definedProp
- Objective-C语言的软件开发工具
2501_90183910
包罗万象golang开发语言后端
Objective-C语言软件开发工具的现状与发展引言在软件开发的世界中,编程语言的选择对项目的成功与否至关重要。Objective-C作为Apple公司推出的一种编程语言,自1980年代以来一直在macOS和iOS的开发中占据着重要地位。尽管Swift的出现为开发者提供了更多的选择,但Objective-C仍然在某些领域保持着其不可替代的优势。本文将深入探讨Objective-C语言的软件开发工
- 原生开发vs混合开发
甘光宗
c++
原生开发(NativeDevelopment)和混合开发(HybridDevelopment)是两种常见的移动应用开发方式,各有其优缺点。以下是它们的详细对比:1.原生开发(NativeDevelopment)定义:原生开发指的是使用平台特定的编程语言和工具(如Android使用Java/Kotlin,iOS使用Swift/Objective-C)来开发应用程序。这些应用直接与操作系统交互,能够使
- java8 Function函数式接口学习
墨笙弘一
JAVAjava8函数式接口Function
/***表示一个函数,它接收一个参数并且返回一个结果。*这是一个函数式接口,它有一个重要的方法是apply(Object)*@param函数的输入类型*@param函数结果的类型*@since1.8*/@FunctionalInterfacepublicinterfaceFunction{/***将该方法应用到指定的参数上*@paramt函数参数*@return返回函数的结果*/Rapply(Tt
- Flutter核心原理(Flutter UI 框架(Framework)+Element、BuildContext和RenderObject )
彳饕餮亍
flutter
什么是UI框架?UI框架是在特定平台上实现快速开发图形用户界面(GUI)的框架。它解决了如何基于基础的图形API(如Canvas)来封装一套高效创建UI的工具集的问题。每个平台的UI框架实现原理基本相通,无论是Android还是iOS,它们将用户界面展示到屏幕的流程都是类似的。UI框架的作用是简化开发人员在特定平台上创建GUI的过程,提供高效且易于使用的工具和组件,使开发者能够快速构建各种用户界面
- Java 函数接口Function详解与示例【函数接口Function】
Java编程乐园
函数接口java
Java8引入了一种新的函数式编程风格,Function接口是Java函数式编程中最重要的四个函数式接口之一。Function函数式接口实现的功能:接受一个输入参数,然后产生一个输出结果。Function接口在java.util.function包中定义,它的源码如下:packagejava.util.function;importjava.util.Objects;@FunctionalInte
- python-mysql-连接池
Xiaohuansong
python笔记pythonmysql连接池
利用内部队列编写的简易的支持上下文的连接池,目前只支持多线程内的链接代码如下实现了最大最小连接池的限制,链接回收,dml封装,动态维护链接等操作importMySQLdbimportloggingimportQueuefromthreadingimportThreadfromcontextlibimportcontextmanagerimporttimeclassMysqlTool(object)
- el-table指定列合并
qq_43383282
javascriptvue.jsecmascript
最近有需求关于实现表格指定列相同数据合并,实现效果如下:非原创,实验出两种方法,总结记录如下:table标签使用:span-method="objectSpanMethod"方法一return{tableColumnList:[{"field":"businessDeptName","fieldName":"业务部门",},{"field":"type","fieldName":"资源类型code
- 15-面向对象进阶
澄子兮
Pythonpython开发语言
面向对象三个特征封装没有学习封装之前,效果如下:classPerson(object):def__init__(self,name,age):self.name=nameself.age=agexiaoming=Person("alvin",16)xiaoming.age=1000print(xiaoming.age)xiaoming.age=-10print(xiaoming.age)#可以看到
- Python datetime timedelta
Claroja
Python
https://docs.python.org/3/library/datetime.html#timedelta-objectsclassdatetime.timedelta(days=0,seconds=0,microseconds=0,milliseconds=0,minutes=0,hours=0,weeks=0)timedelta对象基本介绍classdatetime.timedelta
- 【Python】Python-JOSE:Python 中的 JSON Web Token 处理库
@Unity打怪升级
Pythonpythonjson人工智能前端开发语言开源机器学习
Python-JOSE是一个用于处理JSONWebToken(JWT)和JOSE(JSONObjectSigningandEncryption)标准的Python库。它支持对JWT进行签名、加密、解密和验证等操作,是处理基于OAuth2.0和OpenIDConnect协议的身份验证和授权任务的理想选择。Python-JOSE实现了JOSE规范中定义的JWS(JSONWebSignature)、JW
- 【3-4】《Java面向对象高级知识》——继承、重写和重载、final关键字、抽象类、接口、多态、Object类、内部类、包装类、可变参数、递归
美少女降临人世间
【Java精华笔记】已完结抽象类final关键字重写和重载Java面向对象内部类
文章目录一、继承格式二、子类实例化内存分析三、super详解四、重写1、重写的概念2、重写和重载的区别五、final关键字六、抽象类1、抽象类的概念2、抽象类常见问题3、抽象类和普通类的区别七、接口1、面向接口编程思想2、接口的编写3、接口和抽象类的区别八、多态1、多态的体现2、instanceof九、Object类概述1、toString2、equals十、内部类概述1、成员内部类(了解)2、局
- 70_Redis数据结构-RedisObject
袁庭新
Redis7企业级开发实战教程redis数据结构数据库RedisObject介绍RedisObject源码袁庭新Redis7
1.RedisObject介绍在Redis中,所有数据类型的键和值均会被封装成一个称为Redis对象(RedisObject)的结构。什么是RedisObject呢?RedisObject(或简称robj)是Redis内部用于统一表示不同类型值的一个通用数据结构。从Redis使用者的视角来看,一个Redis节点可以包含多个数据库(在非集群模式下默认为16个,而在集群模式下则限制为1个),每个数据库
- ECMAScript 2016(ES7) - ECMAScript 2024(ES15)新特性全览
孤影_ls
JSjavascript前端ES7-ES15
ECMAScript新特性w3shoolsECMAScript2016ECMAScript2024Es2022array.at获取数组的第N个元素时Object.hasOwn()替代Object.prototype.hasOwnProperty()使用“#”声明私有属性(方法,字段)不用下划线_为前缀了await不需要写asyncRegExp匹配索引/d允许我们指定我们想要获取给定字符串中RegE
- Python使用moviepy模块编辑视频时,有可能会出现“TypeError: ‘module‘ object is not callable”的错误提示
CodeWG
python开发语言
Python使用moviepy模块编辑视频时,有可能会出现“TypeError:‘module‘objectisnotcallable”的错误提示。这个错误提示表明在调用函数或方法时,试图调用一个不可被调用的对象。这个问题通常是由于导入moviepy模块时,模块本身并不是可以被调用的对象而导致的。要解决这个问题,我们需要检查代码中导入moviepy模块的语句是否有误。moviepy模块中最常用的类
- 成功编译和运行roslaunch qbo_webi qbo_webi.launch(解决qbo_object_recognition之后的其他问题)
皮熊
ROS框架opencvqborobot
折腾一天的问题,SurfFeatureDetectortype-specifier问题解决了。需要在cv.h中添加includenonfree/features2d.hpp。fromposter.encodeimportmultipart_encodeImportError:Nomodulenamedposter.encodesudoapt-getinstallpython-postersudoa
- Kotlin学习之 ---- ? ?: !! 操作符的使用(Kotlin花式空判断)
mldxs
kotlinkotlin学习开发语言
目录先抛出个结论:??:的使用方法??:结论:!!的使用方法!!总结:先抛出个结论:?问号修饰,两种使用方式?放在类名后面修饰表示对象可空;?放在对象后修饰,则代表如果对象为空,则不执行后面的代码?:问号冒号修饰符?:放在对象后面,代表如果对象为空,执行?:后面的代码!!叹号修饰符!!放在对象后面,表示即使对象为空我也要往下执行,可能会抛出空指针异常//用于测试的对象返回器classObjectR
- JS宏进阶:Map与Object
jackispy
JS宏进阶javascript开发语言ecmascript
Object是JavaScript中最基本的数据类型之一,用于创建对象实例。newObject()是创建空对象的一种常见方式。而Map只是一种用于存储键值对的数据结构。相对于Object而言,他没有原型(也就是不能通过原型链的方式添加方法),但也存在自身的优势,某些场景,newMap可能比newObject更好用。下面是其内置方法的详细介绍:一、newMap1、创建新的Map对象,只能使用newM
- redis 的 SDS 内存分配
线程A
软件随想redisbootstrap数据库
首先最基础的就是一个redis对象typedefstructObject{unsignedtype:4;unsignedencodings:4;void*ptr;}robj;其中的ptr是一个指向底层value的指针,区别就在于这个执政指向的值是和object一起创建的,还是单独创建的,也就是一个创建2次,一个创建1次:/*44是因为N=64-16(redisObject)-3(sdshr8)-1
- 深入了解JSON:Python中JSON的全面应用指南
kdayjj966
开发语言jsonpython
JSON(JavaScriptObjectNotation)是一种广泛使用的数据交换格式,以其轻量级和易于阅读及解析的特性而备受欢迎。JSON起源于JavaScript,但已经被许多编程语言广泛支持,包括Python。本教程将深入探讨JSON的构造、数据类型,以及在Python中的多种操作方式。JSON的基础构造JSON由两种主要结构组成:对象(Object)和数组(Array)。对象(Objec
- js高阶-监听对象的操作
摇光93
js高阶javascript前端开发语言
控制与监听对象的行为需求:监听对象中的属性设置与访问的过程Object.defineProperty()缺点设计初衷是设置属性描述符,监听更加丰富的操作比如新增属性,删除操作是无能为力的//1.监听对象的某个属性的操作Object.defineProperty(obj,'name',{set:function(val){console.log("设置值",val);this._name=val//
- vue2中在组件内部通过this.$watch监听数据变化总结
上趣工作室
vue2.xuniappvue.js前端javascript
在Vue2中,除了在组件的watch选项中定义观察者,你还可以在组件内部通过this.$watch方法来动态地观察数据的变化。这种方式允许你在运行时添加观察者,非常适合需要根据某些条件动态调整监听的场景。使用this.$watch监听对象属性变化下面是一个示例,展示如何通过this.$watch来监听对象属性的变化:A:B:newVue({el:'#app',data:{myObject:{a:1
- VBS恶搞病毒,慎用
vliu612
整人
1.逼用户叫爸爸,不叫就加密所有.docx文件SetobjShell=CreateObject("WScript.Shell")SetobjFSO=CreateObject("Scripting.FileSystemObject")'弹出输入框strInput=InputBox("请输入'爸爸'否则后果自负!","叫爸爸")IfstrInput="爸爸"Then'解除注册表限制(示例:禁用UAC)
- (七)- plane/crtc/encoder/connector objects
-佩奇的爸爸
#DRM子系统drmobjects
1,framebuffer/planeRockchipRK3399-DRMframebuffer、plane基础知识-大奥特曼打小怪兽-博客园2,crtcRockchipRK3399-DRMcrtc基础知识-大奥特曼打小怪兽-博客园3,encoder/connector/bridgeRockchipRK3399-DRMencoder、bridge、connector基础知识-大奥特曼打小怪兽-博客
- tf.function-> AttributeError: ‘double‘ object has no attribute ‘shape‘
乔宇同学
学习tensorflow
跑tensorflow时出现的bug,不使用tf.function没问题,一旦挂上装饰符,就报错,报错内容如下:Traceback(mostrecentcalllast):File"D:\Anaconda3\envs\tensorflow2\lib\site-packages\tensorflow_core\python\eager\function.py",line111,in_make_inp
- y_t_rank = len(y_t.shape.as_list()) AttributeError: ‘tuple‘ object has no attribute ‘shape‘’
专业混水
tensorflowpythontensorflow深度学习anaconda
在model.fit()的时候遇到了如下问题:Epoch1/400Traceback(mostrecentcalllast):File"F:/code/MYSTUDY/MODEL_version0.0/comparsion/trainST.py",line234,inmain()File"F:/code/MYSTUDY/MODEL_version0.0/comparsion/trainST.py"
- JavaScript详解十 ——数据类型、正则
遇见~未来
JavaScriptjavascript开发语言ecmascript
(一)、数据类型内存1、简单类型与复杂类型简单类型又叫做基本数据类型或者值类型,复杂类型又叫做引用类型值类型:简单数据类型/基本数据类型,在存储时变量中存储的时值本身,因此叫做值类型string、number、boolean、undefined、null注意:简单数据类型null返回的是一个空的对象object如果有个变量我们以后打算存储为对象,暂时没想好放啥,就可以给null引用类型:复杂数据类
- 【python】成功解决AttributeError: ‘Tuple’ object has no attribute ‘shape’
云天徽上
python运行报错解决记录python开发语言pandas机器学习numpysklearn
成功解决AttributeError:‘Tuple’对象没有属性‘shape’在Python的编程中,尤其是当我们使用如NumPy或Pandas等科学计算和数据处理库时,经常会遇到各种属性错误(AttributeError)。其中,“AttributeError:‘Tuple’对象没有属性‘shape’”是一个常见的错误,它通常意味着我们试图在一个元组(Tuple)对象上调用一个它并不拥有的方法或
- python之str与bytes互转
ancy_i_cv
pythonpython
#-*-coding:utf-8-*-bytes_object =b"example"#strobjectstr_object ="example"#方法(1)#str转bytesbytes(str_object,encoding="utf8")#bytes转strstr(bytes_object,encoding="utf-8")#方法(2)#str转bytesstr.encode(str_ob
- 矩阵求逆(JAVA)初等行变换
qiuwanchi
矩阵求逆(JAVA)
package gaodai.matrix;
import gaodai.determinant.DeterminantCalculation;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* 矩阵求逆(初等行变换)
* @author 邱万迟
*
- JDK timer
antlove
javajdkschedulecodetimer
1.java.util.Timer.schedule(TimerTask task, long delay):多长时间(毫秒)后执行任务
2.java.util.Timer.schedule(TimerTask task, Date time):设定某个时间执行任务
3.java.util.Timer.schedule(TimerTask task, long delay,longperiod
- JVM调优总结 -Xms -Xmx -Xmn -Xss
coder_xpf
jvm应用服务器
堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。
典型设置:
java -Xmx
- JDBC连接数据库
Array_06
jdbc
package Util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCUtil {
//完
- Unsupported major.minor version 51.0(jdk版本错误)
oloz
java
java.lang.UnsupportedClassVersionError: cn/support/cache/CacheType : Unsupported major.minor version 51.0 (unable to load class cn.support.cache.CacheType)
at org.apache.catalina.loader.WebappClassL
- 用多个线程处理1个List集合
362217990
多线程threadlist集合
昨天发了一个提问,启动5个线程将一个List中的内容,然后将5个线程的内容拼接起来,由于时间比较急迫,自己就写了一个Demo,希望对菜鸟有参考意义。。
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
public c
- JSP简单访问数据库
香水浓
sqlmysqljsp
学习使用javaBean,代码很烂,仅为留个脚印
public class DBHelper {
private String driverName;
private String url;
private String user;
private String password;
private Connection connection;
privat
- Flex4中使用组件添加柱状图、饼状图等图表
AdyZhang
Flex
1.添加一个最简单的柱状图
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
<?xml version=
"1.0"&n
- Android 5.0 - ProgressBar 进度条无法展示到按钮的前面
aijuans
android
在低于SDK < 21 的版本中,ProgressBar 可以展示到按钮前面,并且为之在按钮的中间,但是切换到android 5.0后进度条ProgressBar 展示顺序变化了,按钮再前面,ProgressBar 在后面了我的xml配置文件如下:
[html]
view plain
copy
<RelativeLa
- 查询汇总的sql
baalwolf
sql
select list.listname, list.createtime,listcount from dream_list as list , (select listid,count(listid) as listcount from dream_list_user group by listid order by count(
- Linux du命令和df命令区别
BigBird2012
linux
1,两者区别
du,disk usage,是通过搜索文件来计算每个文件的大小然后累加,du能看到的文件只是一些当前存在的,没有被删除的。他计算的大小就是当前他认为存在的所有文件大小的累加和。
- AngularJS中的$apply,用还是不用?
bijian1013
JavaScriptAngularJS$apply
在AngularJS开发中,何时应该调用$scope.$apply(),何时不应该调用。下面我们透彻地解释这个问题。
但是首先,让我们把$apply转换成一种简化的形式。
scope.$apply就像一个懒惰的工人。它需要按照命
- [Zookeeper学习笔记十]Zookeeper源代码分析之ClientCnxn数据序列化和反序列化
bit1129
zookeeper
ClientCnxn是Zookeeper客户端和Zookeeper服务器端进行通信和事件通知处理的主要类,它内部包含两个类,1. SendThread 2. EventThread, SendThread负责客户端和服务器端的数据通信,也包括事件信息的传输,EventThread主要在客户端回调注册的Watchers进行通知处理
ClientCnxn构造方法
&
- 【Java命令一】jmap
bit1129
Java命令
jmap命令的用法:
[hadoop@hadoop sbin]$ jmap
Usage:
jmap [option] <pid>
(to connect to running process)
jmap [option] <executable <core>
(to connect to a
- Apache 服务器安全防护及实战
ronin47
此文转自IBM.
Apache 服务简介
Web 服务器也称为 WWW 服务器或 HTTP 服务器 (HTTP Server),它是 Internet 上最常见也是使用最频繁的服务器之一,Web 服务器能够为用户提供网页浏览、论坛访问等等服务。
由于用户在通过 Web 浏览器访问信息资源的过程中,无须再关心一些技术性的细节,而且界面非常友好,因而 Web 在 Internet 上一推出就得到
- unity 3d实例化位置出现布置?
brotherlamp
unity教程unityunity资料unity视频unity自学
问:unity 3d实例化位置出现布置?
答:实例化的同时就可以指定被实例化的物体的位置,即 position
Instantiate (original : Object, position : Vector3, rotation : Quaternion) : Object
这样你不需要再用Transform.Position了,
如果你省略了第二个参数(
- 《重构,改善现有代码的设计》第八章 Duplicate Observed Data
bylijinnan
java重构
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusE
- struts2更改struts.xml配置目录
chiangfai
struts.xml
struts2默认是读取classes目录下的配置文件,要更改配置文件目录,比如放在WEB-INF下,路径应该写成../struts.xml(非/WEB-INF/struts.xml)
web.xml文件修改如下:
<filter>
<filter-name>struts2</filter-name>
<filter-class&g
- redis做缓存时的一点优化
chenchao051
redishadooppipeline
最近集群上有个job,其中需要短时间内频繁访问缓存,大概7亿多次。我这边的缓存是使用redis来做的,问题就来了。
首先,redis中存的是普通kv,没有考虑使用hash等解结构,那么以为着这个job需要访问7亿多次redis,导致效率低,且出现很多redi
- mysql导出数据不输出标题行
daizj
mysql数据导出去掉第一行去掉标题
当想使用数据库中的某些数据,想将其导入到文件中,而想去掉第一行的标题是可以加上-N参数
如通过下面命令导出数据:
mysql -uuserName -ppasswd -hhost -Pport -Ddatabase -e " select * from tableName" > exportResult.txt
结果为:
studentid
- phpexcel导出excel表简单入门示例
dcj3sjt126com
PHPExcelphpexcel
先下载PHPEXCEL类文件,放在class目录下面,然后新建一个index.php文件,内容如下
<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
if (PHP_SAPI == 'cli')
die('
- 爱情格言
dcj3sjt126com
格言
1) I love you not because of who you are, but because of who I am when I am with you. 我爱你,不是因为你是一个怎样的人,而是因为我喜欢与你在一起时的感觉。 2) No man or woman is worth your tears, and the one who is, won‘t
- 转 Activity 详解——Activity文档翻译
e200702084
androidUIsqlite配置管理网络应用
activity 展现在用户面前的经常是全屏窗口,你也可以将 activity 作为浮动窗口来使用(使用设置了 windowIsFloating 的主题),或者嵌入到其他的 activity (使用 ActivityGroup )中。 当用户离开 activity 时你可以在 onPause() 进行相应的操作 。更重要的是,用户做的任何改变都应该在该点上提交 ( 经常提交到 ContentPro
- win7安装MongoDB服务
geeksun
mongodb
1. 下载MongoDB的windows版本:mongodb-win32-x86_64-2008plus-ssl-3.0.4.zip,Linux版本也在这里下载,下载地址: http://www.mongodb.org/downloads
2. 解压MongoDB在D:\server\mongodb, 在D:\server\mongodb下创建d
- Javascript魔法方法:__defineGetter__,__defineSetter__
hongtoushizi
js
转载自: http://www.blackglory.me/javascript-magic-method-definegetter-definesetter/
在javascript的类中,可以用defineGetter和defineSetter_控制成员变量的Get和Set行为
例如,在一个图书类中,我们自动为Book加上书名符号:
function Book(name){
- 错误的日期格式可能导致走nginx proxy cache时不能进行304响应
jinnianshilongnian
cache
昨天在整合某些系统的nginx配置时,出现了当使用nginx cache时无法返回304响应的情况,出问题的响应头: Content-Type:text/html; charset=gb2312 Date:Mon, 05 Jan 2015 01:58:05 GMT Expires:Mon , 05 Jan 15 02:03:00 GMT Last-Modified:Mon, 05
- 数据源架构模式之行数据入口
home198979
PHP架构行数据入口
注:看不懂的请勿踩,此文章非针对java,java爱好者可直接略过。
一、概念
行数据入口(Row Data Gateway):充当数据源中单条记录入口的对象,每行一个实例。
二、简单实现行数据入口
为了方便理解,还是先简单实现:
<?php
/**
* 行数据入口类
*/
class OrderGateway {
/*定义元数
- Linux各个目录的作用及内容
pda158
linux脚本
1)根目录“/” 根目录位于目录结构的最顶层,用斜线(/)表示,类似于
Windows
操作系统的“C:\“,包含Fedora操作系统中所有的目录和文件。 2)/bin /bin 目录又称为二进制目录,包含了那些供系统管理员和普通用户使用的重要
linux命令的二进制映像。该目录存放的内容包括各种可执行文件,还有某些可执行文件的符号连接。常用的命令有:cp、d
- ubuntu12.04上编译openjdk7
ol_beta
HotSpotjvmjdkOpenJDK
获取源码
从openjdk代码仓库获取(比较慢)
安装mercurial Mercurial是一个版本管理工具。 sudo apt-get install mercurial
将以下内容添加到$HOME/.hgrc文件中,如果没有则自己创建一个: [extensions] forest=/home/lichengwu/hgforest-crew/forest.py fe
- 将数据库字段转换成设计文档所需的字段
vipbooks
设计模式工作正则表达式
哈哈,出差这么久终于回来了,回家的感觉真好!
PowerDesigner的物理数据库一出来,设计文档中要改的字段就多得不计其数,如果要把PowerDesigner中的字段一个个Copy到设计文档中,那将会是一件非常痛苦的事情。