小编pm1*_*100的帖子

如何判断Perl变量中的值类型?

如何判断Perl变量中的值类型?

$x 可能是标量,对数组的引用或对哈希(或其他东西)的引用.

perl

57
推荐指数
4
解决办法
9万
查看次数

安装什么去做?

文档没有说buildvs vs install做什么

我的期望是它就像make install; 即它需要编译的东西并放入它的最终位置(/usr/local/bin/my_new_toy或其他任何东西),但似乎它放入了东西GOROOT/bin

我可以告诉你做一个make install- 即把东西放在别的地方吗?或者我只是写一个makefile(请告诉我没有)?

go

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

关于多态性的引用和指针是否相同?

我一直认为必须使用指针进行多态性.使用规范示例:

DrawEngine::render(Shape *shape)
{
    shape->draw();
    shape->visible(true);
}
Run Code Online (Sandbox Code Playgroud)

并将指针传递给各种Shape派生类.它与引用一样吗?

DrawEngine::render(Shape &shape)
{
     shape.draw();
     shape.visible(true);
}
Run Code Online (Sandbox Code Playgroud)

甚至有效:

engine.render(myTriangle); // myTriangle instance of class derived from Shape
Run Code Online (Sandbox Code Playgroud)

如果这样可行,这两种情况之间是否存在差异?我试图在Stroustrup中找到信息,但我一无所获.

我重新打开了这个,因为我想再探索一下.

所以至少有一个区别是dynamic_cast.对我来说,多态性包括使用dynamic_cast.

我可以去吗

Rhomboid & r = dynamic_cast<Rhomboid &>(shape);
Run Code Online (Sandbox Code Playgroud)

如果演员表失败会怎么样?这有什么不同吗?

Rhomboid * r = dynamic_cast<Rhomboid*>(&shape);
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism reference

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

调用者没有"完成"的'yield'枚举 - 会发生什么

假设我有

IEnumerable<string> Foo()
{
     try
     {

         /// open a network connection, start reading packets
         while(moredata)
         {
            yield return packet; 
        }
     }
     finally
      {
        // close connection 
      }
}
Run Code Online (Sandbox Code Playgroud)

(或许我做了'使用' - 同样的事情).如果我的来电者去了会怎么样

var packet = Foo().First();
Run Code Online (Sandbox Code Playgroud)

我刚刚离开了泄漏的连接.什么时候最终被调用?或者正确的事情总是通过魔法发生

用答案和想法编辑

我的示例和其他'普通'(foreach,..)调用模式将很好地工作,因为它们处理IEnumerable(实际上是GetEnumerator返回的IEnumerator).因此,我必须在某个地方设置一个可以做一些时髦的事情(明确地获取一个枚举器而不是处理它等).我会让他们开枪

糟糕的代码

我找到了一个来电者

IEnumerator<T> enumerator = foo().GetEnumerator();
Run Code Online (Sandbox Code Playgroud)

变成

using(IEnumerator<T> enumerator = foo().GetEnumerator())
Run Code Online (Sandbox Code Playgroud)

c# yield-return

36
推荐指数
3
解决办法
1597
查看次数

使用POCO和mongodb c#驱动程序时如何管理_id字段

如果我想用POCO读写mongo数据

public class Thingy
{
     public string Foo {get;set;}
}
...
coll.Insert(new Thing(Foo = "hello"));
Run Code Online (Sandbox Code Playgroud)

当我回读时,我得到一个失败,说_id是一个意外的属性(它是).然后我在课堂上添加了一个名为_id的字段.现在插入不起作用,说_id字段不能为null.一个尝试过的BsonIgnoreIfNull属性,它没有用.

c# poco mongodb

30
推荐指数
3
解决办法
3万
查看次数

我可以使用mongodb c#驱动程序进行文本查询

有没有办法将shell查询语法中表达的查询提交给mongo c#驱动程序

例如,像

Coll.find { "myrecs","$query : { x : 3, y : "abc" }, $orderby : { x : 1 } } ");
Run Code Online (Sandbox Code Playgroud)

以shell指南为例

c# mongodb mongodb-.net-driver

25
推荐指数
3
解决办法
3万
查看次数

std :: string常量的正确习惯用法?

我有一个代表DB对象的地图.我希望从中得到"众所周知"的价值观

 std::map<std::string, std::string> dbo;
 ...
 std::string val = map["foo"];
Run Code Online (Sandbox Code Playgroud)

一切都很好但是我觉得"foo"在每次通话时都被转换为临时字符串.当然,拥有一个常量的std :: string会更好(当然,与刚刚获取对象的磁盘IO相比,它可能只是一个很小的开销,但我认为它仍然是一个有效的问题).那么std :: string常量的正确习惯是什么?

例如 - 我可以

 const std::string FOO = "foo";
Run Code Online (Sandbox Code Playgroud)

在hdr中,但后来我得到了多份副本

编辑:还没有回答说如何声明std :: string常量.忽略整个地图,STL等问题.很多代码都是以std :: string为导向的(我当然是这样)并且很自然地需要为它们设置常量而不需要为内存分配反复付费

EDIT2:从曼努埃尔手中接过PDF回答的二级问题,添加了一个不好习惯的例子

编辑3:答案摘要.请注意,我没有包含那些建议创建新字符串类的内容.我很失望,因为我希望有一个简单的东西只能在头文件中工作(如const char*const).无论如何

a)来自马克b

 std::map<int, std::string> dict;
 const int FOO_IDX = 1;
 ....
 dict[FOO_IDX] = "foo";
 ....
 std:string &val = dbo[dict[FOO_IDX]];
Run Code Online (Sandbox Code Playgroud)

b)来自vlad

 // str.h
 extern const std::string FOO;
 // str.cpp
 const std::string FOO = "foo";
Run Code Online (Sandbox Code Playgroud)

c)来自Roger P.

 // really you cant do it
Run Code Online (Sandbox Code Playgroud)

(b)似乎与我想要的最接近,但有一个致命的缺陷.我不能拥有使用这些字符串的静态模块级代码,因为它们可能尚未构建.我想过(a)​​并且实际上在序列化对象时使用类似的技巧,发送索引而不是字符串,但对于通用解决方案来说似乎有很多管道.很遗憾(c)获胜,std:string 没有简单的常量

c++ string constants

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

c ++中的静态抽象方法

我有一个抽象的基类

class IThingy
{
  virtual void method1() = 0;
  virtual void method2() = 0;
};
Run Code Online (Sandbox Code Playgroud)

我想说 - "所有提供具体实例化的类都必须提供这些静态方法"

我很想做

class IThingy
{
  virtual void method1() = 0;
  virtual void method2() = 0;
  static virtual IThingy Factory() = 0;
};
Run Code Online (Sandbox Code Playgroud)

我知道没有编译,无论如何它还不清楚如何使用它,即使它编译.无论如何我只能这样做

Concrete::Factory(); // concrete is implementation of ITHingy
Run Code Online (Sandbox Code Playgroud)

根本没有在基类中提到工厂.

但我觉得应该有一些表达我希望实现注册的合同的方式.

这有一个众所周知的习语吗?或者我只是把它放在评论中?也许我不应该试图强迫这个

编辑:当我输入问题时,我觉得自己模糊不清.我觉得应该有一些方法来表达它.伊戈尔给出了一个优雅的答案,但实际上它表明它确实无济于事.我最终还是要做

   IThingy *p;
    if(..)
       p = new Cl1();
    else if(..)
       p = new Cl2();
    else if(..)
       p = new Cl3();
    etc.
Run Code Online (Sandbox Code Playgroud)

我想像c#,python或java这样的反射语言可以提供更好的解决方案

c++ abstract

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

如何以编程方式查找ASP.NET App_Data文件夹路径

我需要在那里读一个文件.我尝试过Assembly.ExecutingAssembly等,但这不起作用.

asp.net

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

同步使用漂亮的.net 4.5 HttpClient的最佳方法

我喜欢新的System.Net.Http.HttpClient类.它有一个很好的简单API,它不会抛出正常的错误.但它只是异步.

我需要代码(深入服务器内)

foo();
bar();
// compute stuff
var x = GetThingFromOtherServerViaHttp();
// compute more stuff
wiz(x);
Run Code Online (Sandbox Code Playgroud)

经典的顺序同步代码.我看到了几个类似的问题,但实际上从未真正说过"做这个".我在看

client.PostAsync.Wait()
Run Code Online (Sandbox Code Playgroud)

世界尖叫'不要这样做'.怎么样:

client.PostAsync.Result()
Run Code Online (Sandbox Code Playgroud)

这不只是伪装等待?

最后,我最终传入一个处理结果的lambda回调,然后唤醒显式等待EventWaitHandle的调用线程.很多管道.有没有更简单的东西或者我只是回到使用旧的http客户端

编辑:进一步阅读后,我怀疑这段代码与Wait和Result有相同的问题,它只是一个更长的死锁

编辑:我有MS PM最近向我确认有一个任务'可能需要> X ms(我忘了​​X)的任何API必须是异步',许多PM将此解释为'仅异步'(不清楚这是什么旨在).因此Document DB api只是异步.

c# task-parallel-library

19
推荐指数
2
解决办法
2万
查看次数