很多软件的事件回调都叫钩子美国服务器,也就是 hook,例如 SVN 和 Git
不理解为什么叫钩子,感觉不是很好理解,难道这有什么故事
或者事故
原本:
1+1 =2
-----------------------------------
HOOK:
1+1 =2
----------- ----------
|--------------|
1+1=2 了,要干点啥吗?
类似把程序链条勾起来再套回去
HOOK:
1+1 =2
----------- ----------
|--------------|
1+1=2 了,要干点啥吗?
类似把程序链条勾起来再套回去
太牵强
可以看看 AOP 的概念
那是因为现在的各种组件和库封装的太好了,稍微学习一下汇编,你会很快理解为啥叫 HOOK,钩子
因为可以挂东西,Wordpress 里特别典型
就是程序本身是条 pipeline, hook (钩子) hook (挂) 到 pipeline 上面
我认为钩子和回调,在逻辑上没有本质区别。
区别应该只存在于开发端。
钩子往往是将逻辑填充到预定的方法体 /空函数中。
而回调是传递函数指针。
这个应该来源于设计模式中的模板模式和好莱坞准则,也就是上层定义一个未实现的方法(也就是钩子方法),留给下层实现,在需要的时候上层调用这个钩子方法
就好比二楼的住户在窗口放了一个篮子下楼,楼下的人把食物放到篮子上,当二楼的住户饿了就把篮子拉上去,如果不饿,那就在那放着。在这个比喻中,二楼就是上层实现,一楼是底层实现,篮子就是钩子方法,食物就是钩子的具体逻辑。低层组件将自己挂钩到系统上,高层组件决定什么时候和如何调用低层组件
突出钩子的这么一个特点:比如你在一根管子里,如果你向前伸出一个钩子,它的钩尖是反向的。比钩子大的东西,在通过管道的时候就容易被勾住。有人会想,滤网不也是这样吗,是,但是钩子钩到东西以后,你一拉它,挂载钩子上的东西就能跟着拉出来。
一个正常的流程就像箱子在传送带上,hook 会在需要的时候把箱子勾走做别的事情,然后放回去
其实不少词比较难理解,翻译要占大部分原因。
感觉是个语言问题,而不是题主不理解什么是钩子,只是不理解为什么叫钩子。 很多词都是不太理解英语的话就很难理解,单纯的从英语直译中文都不好理解。 比如 hook (钩子)、socket (套接字)等等。这种翻译还是挺多的吧,就是翻译成中文以后,并不能直观的理解这个东西是啥。 可能需要大佬解释一下 hook 实际的使用(语言)场景之类的才好理解。
![黄金矿工]( http://m.mhhf.com/game-0/20180119/245ff681ae0722ea5b1b93171e04ed66.png)
如图所示
hook 和 callback 虽然很多时候用法一样,但是并不完全一样啊,hook 会改变原有流程
计算机英语中总出现的"hooks" 是什么意思? "钩子" ? 这个钩子应该怎么理解? 是回调的意思? - 凌霜的回答 - 知乎
https://www.zhihu.com/question/20610442/answer/128226574
想起 handle,句柄,把手?
"In computer programming, the term hooking covers a range of techniques used to alter or augment the behaviour of an operating system, of applications, or of other software components by intercepting function calls or messages or events passed between software components. Code that handles such intercepted function calls, events or messages is called a hook."
https://en.wikipedia.org/wiki/Hooking
是的,当年学 C++时,经常碰到句柄,什么文件句柄,就感觉完全不知道是什么
会想起以前的青葱岁月,回调和句柄真是令我百思不得其解
句柄真的是翻译的太差了.
套接字不服
安全套接字
好莱坞模式是个啥。。
翻译成“挂钩”会更加直观。“钩子”会让人误解为那种带个绳子的钩子。 而实际上墙上的挂钩。
你知道”卖钩子的“是什么意思吗?
北方程序员表示我们叫轮子
计算机有不少概念虽然在不同上下文环境下叫不同的名字,但在抽象的层面上实际上就是一回事。
至于钩子的理解,形象点就好比正常走路,衣服被钩子钩住了不得不停下来处理,改变了原来的走路过程。就这么理解着呗。
换个上下文可能就叫中断、劫持、注入、回调、生命周期函数、模板方法、过滤器、拦截器、切面、异常控制流等等了。
具体细节上可能有些有很大区别,但抽象起来无非一个定义好的过程某个位置被加了另一段过程呗。
来源的话可就难考究了。
hook 不就是事件,观察者模式么
哎,这贴看下来真的觉得楼上太多人都对本地程序的开发没了解了
hook 这个词和翻译没关系,lz 明显没有做过原生类软件的开发,hook 不等于 callback,lz 搞错了这两者的区别了,所以对 hook 的理解有点偏差
HOOK 一般是用来形容软件开发中与 "截取" 有关的技术的词语。注意不是回调,而是截取,这里的截取尤其是指截取 API
比如在 Windows 下,你可以写个程序把自己的 dll 注入到目标进程中,这样每当目标程序调用系统的 API 或自己程序内部的函数的时候,你都可以直接截取到目标程序的 API 调用,你可以在程序调用 API 前随意修改传给系统的参数,也可以修改系统 API 返回给目标程序的数据。利用 HOOK 你可以在不修改目标程序的情况下,任意修改它的所有输入输出。这就叫 HOOK
Android 的 Xposed 框架就是个 HOOK 框架,可以不修改 app 任意 HOOK 安卓系统的 API,功能才如此强大
所以钩子这个词其实是非常形象且准确的,你把钩子扔进目标程序里(甚至直接扔到整个系统里都行),当对应的 API 被调用时候,就自动上钩了,上钩后执行你的程序,这就是“钩子”这个词的意思
框架里说的钩子同理,只不过框架的钩子是开发者事先就埋好的你可以随意调用。实现方式可能和回调很像,但并不等于回调
钩子就是自动化流水线上的打工仔,机器处理不了的,放几个打工仔,这里拧个螺丝,那里做下质检,程序员就是车间主任,整天来回折腾这些打工仔
当年学 c+
+看到这个 句柄 很长时间难以理解
嗯,感谢科普
这个是最好的解释了,Android 如果了解过插桩和插件化对这个就比较好理解了
所以别看中文书籍。真看不懂。
我还以为楼主刚到西北地区
特定事件理解为鱼,钓鱼的过程叫 hook
玩过 iOS 越狱开发吗,全是 hook…… 记得上古时期有个上手的工具就直接叫 captainhook