[疑难] 请问D语言的事件用std.signals库如何实现,同时请讲解一下
niijyeni
2007-07-19
小弟接触D语言还是有一段时间了,但是对于事件始终没有搞清楚在D语言里如何实现,前段时间看了圈子里发表的“D语言中实现Observer模式”,似乎找到了一点头绪。可是当我要加入自己的事件的时候,去无从下手。
mixin Signals!(char[], int); 这一句是混入信号处理代码,可是emit发出信号的时候是否只有一种写法了,是不是我都要为所有的时间些一个slot的模板??或者有别的语法,一直没有找到明确的解释。望,小弟在这里献丑了。 |
|
oldrev
2007-07-19
个人感觉 phobos 里的写的不好,建议参考 Tango 的。Tango 文档里还有一个简单的范例
|
|
niijyeni
2007-07-19
oldrev 写道 个人感觉 phobos 里的写的不好,建议参考 Tango 的。Tango 文档里还有一个简单的范例
非常感谢你的建议,我刚刚也去看了一下TANGO也没有找到Signal比较有用的例子哦,只有它的实现代码……可是没有看出他的一个原理 |
|
oldrev
2007-07-19
恩好像我写的 dotmars里也有一个更简单的
实现代码: http://dotmars.googlecode.com/svn/trunk/dotmars/base/signals.d 简单例子: http://dotmars.googlecode.com/svn/trunk/samples/base/signals.d Signal/Slot 的原理很简单,其实就是观察者模式 在dotmars中的Signal/Slot中,Signal 代表了一个事件,可以通过 Signal.opCall 引发。当引发事件时,在此Signal里通过Signal.connect(或更简单的 ~=)注册过的Slots(其实就是delegate)就会被依次调用。 |
|
niijyeni
2007-07-20
oldrev 写道 恩好像我写的 dotmars里也有一个更简单的
实现代码: http://dotmars.googlecode.com/svn/trunk/dotmars/base/signals.d 简单例子: http://dotmars.googlecode.com/svn/trunk/samples/base/signals.d Signal/Slot 的原理很简单,其实就是观察者模式 在dotmars中的Signal/Slot中,Signal 代表了一个事件,可以通过 Signal.opCall 引发。当引发事件时,在此Signal里通过Signal.connect(或更简单的 ~=)注册过的Slots(其实就是delegate)就会被依次调用。 谢谢你,我看看去 PS:其实我也申请加入了DotMars的开发团队,可是那个需要DSSS安装我在Dsource下载的DSSS根本就没有办法用,哎...感觉这个人气不是很旺,难得看到几个人 |
|
oldrev
2007-07-21
我的dsource 下载的DSSS没问题,windows和linux版都如此。
把dsss解开,然后把dsss/bin 加入 %PATH%就可以用了 |
相关讨论
相关资源推荐
- 只是为了好玩-Linus Torvalds 自传
- Linux 之父 Linus Torvalds:写代码很容易,人际关系太难了!
- Linux操作系统的诞生与其对现代信息世界的影响
- Linux的缔造者——Linus Torvalds
- 比Linus更牛逼的程序员,QEMU、FFmpeg的作者
- 伟大的系统-Linux
- 小C说历史(人物介绍第一篇):传奇人物Linus Torvalds 缔造Linux和Git
- Linux 之父 LinusTorvalds 喊话:Rust 即将出现在 Linux 内核中
- Linux之父—LinusTorvalds
- Linus Torvalds:未来 25 年,Linux 风采依旧!