[疑难] 请问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%就可以用了
Global site tag (gtag.js) - Google Analytics