问题列表 - 第46495页

如何顺序执行异步操作?

现在我正在使用类似于这种结构的东西

A.Completed += () =>
{ B.Completed += () =>
  {  C.Completed += () =>
     {
       //
     }
     C();
   }
   B();
 }  
 A();
Run Code Online (Sandbox Code Playgroud)

并不是很满意.是否有更好,更清洁的方式来执行此类后续/并发操作执行?

我看看Rx框架,但它是为其他任务设计的,看起来像我的问题有点过分.

c# silverlight

9
推荐指数
2
解决办法
1154
查看次数

带有抽象基类的C++ boost :: ptr_map导致插入问题

从我的上一个问题开始,我有一个抽象基类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_ptrstd::map可能会更好,但这个已经尝试,我现在有这么-为什么- doesn't-这个工作综合症.

c++ boost

4
推荐指数
2
解决办法
1548
查看次数

Android的SimpleCursorAdapter使用DISTINCT进行查询

这是一个有趣的问题,我很震惊,在互联网上没有经常被问到.一旦你启动并运行ContentProvider并学习如何使用它,Android的CursorAdapters非常有用,但由于他们要求将_id字段作为其查询的一部分,所以它们是有限的(没有它就会抛出错误).原因如下:

我的具体问题是我有两个微调器:一个微调器应该包含数据库中唯一的"类别"名称,另一个应该填充所选"类别"的所有数据库条目(类别是列名,在这里).这似乎是一个非常简单的设置,很多程序可能会使用,不是吗?试图实现第一个微调器是我遇到问题的地方.

这是我想要第一个微调器的查询:

SELECT DISTINCT category FROM table;
Run Code Online (Sandbox Code Playgroud)

使此查询在CursorAdapter上引发错误,因为_id列是查询的一部分.将_id列添加到投影自然会返回表的每一行,因为您现在也要求不同的id,并且每个id都是不同的(根据定义).显然,我宁愿每个类别名称只看到一个条目.

我已经实现了一个解决方法,就是简单地进行上面的查询,然后将结果复制到ArrayAdapter中.我这篇文章的原因是看看这个奇怪的小问题是否有一个更优雅的解决方案,并开始讨论我可以做得更好.非常欢迎使用其他实现建议,例如使用不同类型的控件或适配器.

sqlite android distinct simplecursoradapter

11
推荐指数
1
解决办法
4552
查看次数

Java,深入研究HashMaps的ArrayList

我有一个ArrayList<HashMap<String, String>>.我想快速从中提取一个ArrayList<String>包含所有键的新内容.

我该怎么做呢?

java arraylist drilldown

2
推荐指数
1
解决办法
539
查看次数

如何指定一个可以用英语以外的欧洲语言工作的正则表达式字符范围?

我正在使用Ruby的正则表达式引擎.我需要编写一个执行此操作的正则表达式

WIKI_WORD = /\b([a-z][\w_]+\.)?[A-Z][a-z]+[A-Z]\w*\b/
Run Code Online (Sandbox Code Playgroud)

除了英语之外,还可以使用其他欧洲语言.我不认为字符范围[az]会覆盖德语等小写字母.

ruby regex unicode internationalization

6
推荐指数
1
解决办法
1923
查看次数

协议缓冲区是否可用于F#?

只是好奇 - 协议缓冲区可用于F#吗?有任何警告等?

f# protocol-buffers

3
推荐指数
1
解决办法
1761
查看次数

如何在Javascript中从另一个成员函数调用成员函数

说我有这样的代码

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很新的人.我应该以另一种方式调用成员函数吗?或者我应该做一些完全不同的事情?

编辑:这是我创建对象的方式: …

javascript

6
推荐指数
1
解决办法
7087
查看次数

Visual Studio 2010 Pro - SuppressMessage

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,因此这些变量在运行时分配.

mef visual-studio-2010 suppress-warnings

8
推荐指数
1
解决办法
2833
查看次数

约束中的模糊类型变量'blah'...如何修复?

我正在尝试在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)

haskell type-variables

6
推荐指数
1
解决办法
569
查看次数

从python中的类变量调用class/static方法

我正在尝试使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的最后答案

"模块可以包含可执行语句和函数定义.这些语句用于初始化模块.它们仅在模块第一次导入时才执行"

对于静态类,我将放弃类并只创建一个模块级变量.

python class

7
推荐指数
2
解决办法
5833
查看次数