小编JBR*_*son的帖子

如何让GNU明确测试失败?

经过多年没有使用make,我发现自己需要它,现在是gnu版本.我很确定我应该能够做我想做的事情,但是没有弄清楚如何,或者找到谷歌的答案等.

我正在尝试创建一个测试目标,它将多次执行我的程序,将结果保存在日志文件中.一些测试应该导致我的程序中止.不幸的是,我的makefile在第一次测试时中止,导致错误.我有类似的东西:

# Makefile
# 
test:
        myProg -h > test.log              # Display help
        myProg good_input >> test.log     # should run fine
        myProg bad_input1 >> test.log      # Error 1
        myProg bad_input2 >> test.log      # Error 2
Run Code Online (Sandbox Code Playgroud)

使用上面的命令,在bad_input1运行后退出,永远不会运行bad_input2.

makefile gnu-make

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

为什么API会返回'void'?

在编写API或可重用对象时,是否存在任何技术原因导致返回'void'的所有方法调用不应仅返回'this'(*在C++中为此)?

例如,使用字符串类,我们可以做这样的事情:

string input= ...;
string.Join(input.TrimStart().TrimEnd().Split("|"), "-");
Run Code Online (Sandbox Code Playgroud)

但我们不能这样做:

string.Join(input.TrimStart().TrimEnd().Split("|").Reverse(), "-");
Run Code Online (Sandbox Code Playgroud)

..beause Array.Reverse()返回void.

还有许多其他示例,其中API具有许多返回void的操作,因此代码最终看起来像:

api.Method1();
api.Method2();
api.Method3();
Run Code Online (Sandbox Code Playgroud)

..但完全有可能写:

api.Method1().Method2().Method3()
Run Code Online (Sandbox Code Playgroud)

..如果API设计师允许这样做.

遵循这条路线有技术原因吗?或者它只是一种风格的东西,表示可变性/新对象?

(x-ref 关于返回虚空的文体问题)


结语

我已经接受了Luvieere的答案,因为我认为这最能代表意图/设计,但似乎有一些流行的API示例与此有所不同:

在C++中cout << setprecision(..) << number << setwidth(..) << othernumber;似乎改变了cout对象,以便修改插入的下一个数据.

在.NET中,Stack.Pop()并且Queue.Dequeue()都返回一个项目,但改变集合了.

向ChrisW和其他人道歉,详细了解实际的性能成本.

c# c++ api

23
推荐指数
4
解决办法
2518
查看次数

连续枚举 C++11

如果枚举是连续的,有没有办法在 C++11 中检查?

给出不是的枚举值是完全有效的。是否有像 C++14、C++17 或 C++20 中的类型特征这样的特性来检查枚举是否连续?这将在 static_assert 中使用。

一个小例子如下:

enum class Types_Discontinuous {
  A = 10,
  B = 1,
  C = 100
};

enum class Types_Continuous {
  A = 0,
  B = 1,
  C = 2
};

static_assert(SOME_TEST<Types_Discontinuous>::value, "Enum should be continuous"); // Fails
static_assert(SOME_TEST<Types_Continuous>::value, "Enum should be continuous");    // Passes
Run Code Online (Sandbox Code Playgroud)

c++ c++11 c++14 c++17 c++20

17
推荐指数
2
解决办法
1074
查看次数

ASP.NET MVC术语让我沮丧 - 为什么'ViewModel'?

我是一个ASP.NET MVC新手,但以前使用过很多模型 - 视图 - 控制器框架.

最近遇到了这样的惯例,即将您的特定视图所需的数据(实际上,它被分配给ViewData)收集到一个名为(NameOfView)ViewModel的新类中.

收集这些数据,使其与View/Controller交互提供的功能相关联,这使我成为一个辅助结构,甚至是闭包机制(在'封装一组变量'意义上).

那么为什么它被称为'ViewModel',因为它既不是视图也不是模型?

有没有其他人觉得这个名字令人困惑?

编辑:只是将属性放到View上有什么问题,以便Controller可以填充它们(如在其他MVC框架中)?

asp.net-mvc viewmodel

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

CruiseControl(或任何其他CI工具)提供的不仅仅是编写良好的(n)Ant?

我们有大量的nAnt脚本来构建我们的各种产品.它们几乎都具有以下结构:

  1. 删除旧的工作副本.
  2. 从版本控制中查看完整的新副本.
  3. 在适当的文件中增加内部版本号(自定义nAnt任务).
  4. 运行静态分析(StyleCop,Perl脚本)
  5. 使用Visual Studio构建解决方案 - 以MSI输出结束.
  6. 运行单元测试(nUnit,JSUnit)
  7. 运行静态分析(FxCop)
  8. 将可交付成果(MSI,自述文件等)压缩到名称很好的包中.
  9. 将此zip包放到服务器共享上.
  10. 将结果发送给团队.

根据我们的研究,似乎CruiseControl(.net?)/ Hudson/BuildBot只会添加导致构建的触发器,此时双击远程桌面上的nAnt脚本和状态仪表板.

我们缺少其他重要的东西吗?

nant continuous-integration

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

使用 Django API 处理并发请求

我想使用 DRF 创建一个简单的 Rest API ( https://www.django-rest-framework.org/ )。另一个服务将发出提供 JSON 的请求。这个 json 被解析,并且将发生一些相当简单的 pandas 数据帧操作。结果通过 JSON 发回。

有没有办法让这个过程成为多线程?尽管 pandas 操作相当简单,但它们仍然可能需要大约 0.5 秒到 1 秒,如果出于某种原因在同一时刻发出 3-4 个此类请求,我希望避免人们等待几秒钟。

谢谢!

python pandas django-rest-framework

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

使用范围保护作为代码合同

因此,我们正在调查范围保护或类似机制的使用,以确保传入/传出对象的有效性和/或内部状态不变性,类似于C#代码契约.

在正常处理过程中出现意外情况/异常导致某些对象处于不一致状态的特定情况下,我们可以/应该采用什么机制来支持范围守卫将要投诉的事实当我们跳出这个功能?

这里有一些示例伪代码来说明我的观点:

struct IObjectValidator;

struct ObjectValidatorScopeGuard
{
  ObjectValidatorScopeGuard(IObjectValidator * pObj) 
    : m_ptr(pObj) 
  {
    Assert(!m_ptr || m_ptr->isValid());
  }

  ~ObjectValidatorScopeGuard()
  {
    Assert(!m_ptr || m_ptr->isValid());
  }
  private:
    IObjectValidtor * m_ptr;
};


int SomeComponent::CriticalMethod(const ThingA& in, ThingB& inout, ThingC * out)
{
  ObjectValidatorScopeGuard sg1(static_cast<IObjectValidator *>(&in));   
  ObjectValidatorScopeGuard sg2(static_cast<IObjectValidator *>(&inout));
  ObjectValidatorScopeGuard sg3(static_cast<IObjectValidator *>(out));

  // create out
  try
  {
     out = new ThingC();
     out->mergeFrom(inout, out); // (1)
  }
  catch (const EverythingHasGoneHorriblyWrongException& ex)
  {
     // (2) out and inout not guaranteed valid here..
  }
  return 0;
} …
Run Code Online (Sandbox Code Playgroud)

c++ design-by-contract code-contracts

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