现在我正在使用类似于这种结构的东西
A.Completed += () =>
{ B.Completed += () =>
{ C.Completed += () =>
{
//
}
C();
}
B();
}
A();
Run Code Online (Sandbox Code Playgroud)
并不是很满意.是否有更好,更清洁的方式来执行此类后续/并发操作执行?
我看看Rx框架,但它是为其他任务设计的,看起来像我的问题有点过分.
从我的上一个问题开始,我有一个抽象基类Action,它充当执行各种不同操作的接口.为了实现一个抽象层,我有一个ActionHandler类,它在这里存储各种动作:
class ActionHandler
{
public:
ActionHandler();
~ActionHandler();
Action& getAction(std::string ActionString);
private:
boost::ptr_map<std::string, vx::modero::Action> cmdmap;
};
Run Code Online (Sandbox Code Playgroud)
我从上一个问题的回答中了解到,boost会自动处理将任何插入的指针类型(类)释放到此映射中.
所以,我现在尝试插入派生的东西Action,这发生在ActionHandler(ActionHandler :: ActionHandler)的构造函数中:
ActionHandler::ActionHandler()
{
this->cmdmap.insert("help", new DisplayHelpAction());
};
Run Code Online (Sandbox Code Playgroud)
凡DisplayHelpAction公开子类Action.这样做会导致此错误:
error: no matching function for call to ‘boost::ptr_map<std::basic_string<char>,
Action>::insert(const char [5], DisplayHelpAction*)’
Run Code Online (Sandbox Code Playgroud)
现在,从这里我使用的方法是:
std::pair<iterator,bool> insert( key_type& k, T* x );
Run Code Online (Sandbox Code Playgroud)
所以我可以看到,使用多态在这里应该工作.我不想使用,boost::any因为我不希望此列表包含任何类型的指针.它应该符合Action或不存在指定的接口.
那么,我做错了什么?
我可以依靠简单地使用std::map并拥有我的析构函数delete,所以如果这不能合理地实现它不是一个显示塞子.我个人认为shared_ptr有std::map可能会更好,但这个已经尝试,我现在有这么-为什么- doesn't-这个工作综合症.
这是一个有趣的问题,我很震惊,在互联网上没有经常被问到.一旦你启动并运行ContentProvider并学习如何使用它,Android的CursorAdapters非常有用,但由于他们要求将_id字段作为其查询的一部分,所以它们是有限的(没有它就会抛出错误).原因如下:
我的具体问题是我有两个微调器:一个微调器应该包含数据库中唯一的"类别"名称,另一个应该填充所选"类别"的所有数据库条目(类别是列名,在这里).这似乎是一个非常简单的设置,很多程序可能会使用,不是吗?试图实现第一个微调器是我遇到问题的地方.
这是我想要第一个微调器的查询:
SELECT DISTINCT category FROM table;
Run Code Online (Sandbox Code Playgroud)
使此查询在CursorAdapter上引发错误,因为_id列是查询的一部分.将_id列添加到投影自然会返回表的每一行,因为您现在也要求不同的id,并且每个id都是不同的(根据定义).显然,我宁愿每个类别名称只看到一个条目.
我已经实现了一个解决方法,就是简单地进行上面的查询,然后将结果复制到ArrayAdapter中.我这篇文章的原因是看看这个奇怪的小问题是否有一个更优雅的解决方案,并开始讨论我可以做得更好.非常欢迎使用其他实现建议,例如使用不同类型的控件或适配器.
我有一个ArrayList<HashMap<String, String>>.我想快速从中提取一个ArrayList<String>包含所有键的新内容.
我该怎么做呢?
我正在使用Ruby的正则表达式引擎.我需要编写一个执行此操作的正则表达式
WIKI_WORD = /\b([a-z][\w_]+\.)?[A-Z][a-z]+[A-Z]\w*\b/
Run Code Online (Sandbox Code Playgroud)
除了英语之外,还可以使用其他欧洲语言.我不认为字符范围[az]会覆盖德语等小写字母.
说我有这样的代码
function Chart(start, end, controller, method, chart)
{
console.log('Chart constructor called');
this.start = start;
this.end = end;
this.controller = controller;
this.method = method;
this.chart = chart;
this.options = {};
}
Chart.prototype.update = function()
{
console.log('update ' + new Date().getTime());
$.getJSON('index.php', {
controller: this.controller,
method: this.method,
START: this.start,
END: this.end },
function(json) { this.draw(json); }); //<-- Problem right here!
}
Chart.prototype.draw = function(json)
{
//lots of code here
}
Run Code Online (Sandbox Code Playgroud)
我收到了错误Uncaught TypeError: Object #<an Object> has no method 'draw'.现在,我是第一个承认我对Javascript很新的人.我应该以另一种方式调用成员函数吗?或者我应该做一些完全不同的事情?
编辑:这是我创建对象的方式: …
SupressMessage的选项在VS 2010 Pro中不可用吗?
当我右键单击警告列表中的警告时,没有禁止选项.我也尝试了错误,没有选择.然后,我尝试创建自己的GlobalSuppression.cs文件,但不知道警告应归入哪个类别.
现在我正在这样做,这有效,但我更喜欢使用GlobalSuppression文件
#pragma warning disable 0649,0169
[Import(AllowRecomposition = false)]
private IModuleManager _moduleManager;
[Import(AllowRecomposition = false)]
private IRegionManager _regionManager;
[Import(AllowRecomposition = false)]
private IRibbonService _menuService;
#pragma warning restore 0649,0169
Run Code Online (Sandbox Code Playgroud)
这些是我想要抑制的输出窗口的警告:
warning CS0649: Field 'Shell._moduleManager' is never assigned to, and will always have its default value null
warning CS0169: The field 'Shell._regionManager' is never used
warning CS0649: Field 'Shell._menuService' is never assigned to, and will always have its default value null
Run Code Online (Sandbox Code Playgroud)
我想要压制的原因是我的解决方案使用Prism/MEF,因此这些变量在运行时分配.
我正在尝试在Haskell中编写一个简单的光线跟踪器.我想定义一个类型类,表示可用的各种表面,并有一个函数来确定光线与它们相交的位置:
{-# LANGUAGE RankNTypes #-}
data Vector = Vector Double Double Double
data Ray = Ray Vector Vector
class Surface s where
intersections :: s -> Ray -> [Vector]
-- Obviously there would be some concrete surface implementations here...
data Renderable = Renderable
{ surface :: (Surface s) => s
, otherStuff :: Int
}
getRenderableIntersections :: Renderable -> Ray -> [Vector]
getRenderableIntersections re ra = intersections (surface re) ra
Run Code Online (Sandbox Code Playgroud)
但是这给了我错误:
Ambiguous type variable 's' in the constraint:
'Surface'
arising …Run Code Online (Sandbox Code Playgroud) 我正在尝试使ImageLoader类处理图像资源的加载和处理,如下所示:
class ImageLoader:
TileTable = __loadTileTable('image path', some other variable)
@staticmethod
def _loadTileTable(arg1, arg2):
blah blah
Run Code Online (Sandbox Code Playgroud)
然而,在编译我得到: NameError: name '_loadTileTable' is not defined
如果我替换第二行TileTable = ImageLoader.__loadTileTable('image path', some other variable)然后我得到NameError: name 'ImageLoader' is not defined
当我从C#转到Python时,静态类的静态类就是我用来实现它的.但是,我对如何在python中执行此操作持开放态度(即,仅通过其功能将调用静态库函数组合在一起).
更新: 阅读完两个答案后,我得到一张照片,我正在尝试做的事情可能不对.我将如何改变ImageLoader,以便我可以这样做:
假设tile表返回了一个数组
module1.py
aTile = ImageLoader.TileTable[1]
Run Code Online (Sandbox Code Playgroud)
module2.py
anotherTile = ImageLoader.TileTable[2]
Run Code Online (Sandbox Code Playgroud)
理想情况下,我只会填充一次TileTable.
更新:
感谢所有的答案,我找到了我在python模块doco中只填充一次TileTable的最后答案
"模块可以包含可执行语句和函数定义.这些语句用于初始化模块.它们仅在模块第一次导入时才执行"
对于静态类,我将放弃类并只创建一个模块级变量.