为什么要叫钩子?

2021-06-04 16:18:19 +08:00
 balabalaguguji

很多软件的事件回调都叫钩子,也就是 hook,例如 SVN 和 Git

不理解为什么叫钩子,感觉不是很好理解,难道这有什么故事

7286 次点击
所在节点    程序员
51 条回复
ericgui
2021-06-04 16:20:50 +08:00
或者事故
wafm
2021-06-04 16:22:19 +08:00
原本:
1+1 =2
-----------------------------------

HOOK:
1+1 =2
----------- ----------
|--------------|
1+1=2 了,要干点啥吗?


类似把程序链条勾起来再套回去
wafm
2021-06-04 16:23:18 +08:00
HOOK:
1+1 =2
----------- ----------
|--------------|
1+1=2 了,要干点啥吗?


类似把程序链条勾起来再套回去
balabalaguguji
2021-06-04 16:23:40 +08:00
@wafm #2 太牵强
asdasdasdzxc
2021-06-04 16:24:16 +08:00
可以看看 AOP 的概念
wafm
2021-06-04 16:24:43 +08:00
@balabalaguguji 那是因为现在的各种组件和库封装的太好了,稍微学习一下汇编,你会很快理解为啥叫 HOOK,钩子
falcon05
2021-06-04 16:25:21 +08:00
因为可以挂东西,Wordpress 里特别典型
chinvo
2021-06-04 16:26:52 +08:00
就是程序本身是条 pipeline, hook (钩子) hook (挂) 到 pipeline 上面
kop1989
2021-06-04 16:31:34 +08:00
我认为钩子和回调,在逻辑上没有本质区别。
区别应该只存在于开发端。

钩子往往是将逻辑填充到预定的方法体 /空函数中。
而回调是传递函数指针。
suiterchik
2021-06-04 16:31:39 +08:00
这个应该来源于设计模式中的模板模式和好莱坞准则,也就是上层定义一个未实现的方法(也就是钩子方法),留给下层实现,在需要的时候上层调用这个钩子方法

就好比二楼的住户在窗口放了一个篮子下楼,楼下的人把食物放到篮子上,当二楼的住户饿了就把篮子拉上去,如果不饿,那就在那放着。在这个比喻中,二楼就是上层实现,一楼是底层实现,篮子就是钩子方法,食物就是钩子的具体逻辑。低层组件将自己挂钩到系统上,高层组件决定什么时候和如何调用低层组件
IgniteWhite
2021-06-04 16:35:25 +08:00
突出钩子的这么一个特点:比如你在一根管子里,如果你向前伸出一个钩子,它的钩尖是反向的。比钩子大的东西,在通过管道的时候就容易被勾住。有人会想,滤网不也是这样吗,是,但是钩子钩到东西以后,你一拉它,挂载钩子上的东西就能跟着拉出来。
ztxcccc
2021-06-04 16:40:47 +08:00
一个正常的流程就像箱子在传送带上,hook 会在需要的时候把箱子勾走做别的事情,然后放回去
skinny
2021-06-04 16:44:56 +08:00
其实不少词比较难理解,翻译要占大部分原因。
EgoTao
2021-06-04 16:48:30 +08:00
感觉是个语言问题,而不是题主不理解什么是钩子,只是不理解为什么叫钩子。 很多词都是不太理解英语的话就很难理解,单纯的从英语直译中文都不好理解。 比如 hook (钩子)、socket (套接字)等等。这种翻译还是挺多的吧,就是翻译成中文以后,并不能直观的理解这个东西是啥。 可能需要大佬解释一下 hook 实际的使用(语言)场景之类的才好理解。
SlipStupig
2021-06-04 16:49:47 +08:00
SlipStupig
2021-06-04 16:54:07 +08:00
@kop1989 hook 和 callback 虽然很多时候用法一样,但是并不完全一样啊,hook 会改变原有流程
freakxx
2021-06-04 17:06:15 +08:00
计算机英语中总出现的"hooks" 是什么意思? "钩子" ? 这个钩子应该怎么理解? 是回调的意思? - 凌霜的回答 - 知乎
https://www.zhihu.com/question/20610442/answer/128226574
oneisall8955
2021-06-04 17:12:17 +08:00
想起 handle,句柄,把手?
rioshikelong121
2021-06-04 17:21:59 +08:00
"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
balabalaguguji
2021-06-04 17:47:35 +08:00
@oneisall8955 #18 是的,当年学 C++时,经常碰到句柄,什么文件句柄,就感觉完全不知道是什么

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/781410

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX