小编cib*_*cib的帖子

如何修复本地"异常"的"抛出"?

在处理REST API调用的此函数中,处理部分请求的任何被调用函数都可能抛出错误,表示应将错误代码作为响应发送.但是,函数本身也可能发现错误,此时它应该跳转到异常处理块.

static async handleRequest(req) {
    try {
        let isAllowed = await checkIfIsAllowed(req);
        if (!isAllowed) {
            throw new ForbiddenException("You're not allowed to do that.");
        }
        let result = await doSomething(req); // can also raise exceptions
        sendResult(result);
    } catch(err) {
        sendErrorCode(err);
    }
}
Run Code Online (Sandbox Code Playgroud)

Webstorm将throw使用以下消息强调:'throw' of exception caught locally. This inspection reports any instances of JavaScript throw statements whose exceptions are always caught by containing try statements. Using throw statements as a "goto" to change the local flow of …

javascript rest exception-handling node.js async-await

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

你如何告诉LSHIFT在WM_KEYDOWN事件中与RSHIFT分开?

根据MSDN wparam应该持有密钥代码.问题是,当按下shift时,代码为16(VK_SHIFT),但我需要区分VK_LSHIFT和VK_RSHIFT.

对于VK_CONTROL,似乎有一个解决方法:

if(wParam == VK_CONTROL) {
    if ( lParam&EXTENDED_KEYMASK )
        wParam = VK_RCONTROL;
    else
        wParam = VK_LCONTROL;
}
Run Code Online (Sandbox Code Playgroud)

但是,同样不适用于VK_SHIFT:

if(wparam == VK_SHIFT) {
    if ( lParam&EXTENDED_KEYMASK )
        wParam = VK_RSHIFT;
    else
        wParam = VK_LSHIFT;
}
Run Code Online (Sandbox Code Playgroud)

在后一个例子中,它将始终假设LSHIFT.

c winapi

8
推荐指数
3
解决办法
4006
查看次数

如何调整VirtualAlloc分配的区域的大小?

我想调整由MS窗口的VirtualAlloc分配的内存区域.查看VirtualFree文档,可以仅部分地解除区域,但不可能部分释放它.也就是说,可以释放部分物理内存,但不能释放虚拟内存的一部分.

我知道在这种情况下可能有必要重新分配该区域.但是,复制整个区域的效率会相当低.有没有办法让windows分配一个不同大小的新区域,指向同一个内存?

c winapi

7
推荐指数
1
解决办法
3586
查看次数

dynamic_cast真的适用于多重继承吗?

我想看看是否可以创建"接口",继承它们,然后在运行时检查是否有任何随机类实现了该接口.这就是我所拥有的:

struct GameObject {
    int x,y;
    std::string name;

    virtual void blah() { };
};

struct Airholder {
   int oxygen;
   int nitrogen;
};

struct Turf : public GameObject, public Airholder {
   Turf() : GameObject() {
      name = "Turf";
   }

   void blah() { };
};

void remove_air(GameObject* o) {
   Airholder* a = dynamic_cast<Airholder*>(o);
   if(!a) return;
   a->oxygen   = 0;
   a->nitrogen = 0;
};
Run Code Online (Sandbox Code Playgroud)

现在,它的工作原理.文档说它工作正常,测试示例有效.但是,直到我向GameObject添加了一个虚方法,它才编译.问题是,我真的不知道该功能是否打算像这样使用.是什么让我想知道我必须为我正在检查的类声明一个虚函数.但显然,没有,我正在检查的类本身没有虚函数,实际上我的整个代码与虚函数无关,这是一种完全不同的方法.

所以,我想我的问题是:如果我正在做的事情真的有效,为什么我需要一个虚拟函数给我的班级一个vtable?为什么我不能将类声明为"运行时类型"或没有虚函数的东西?

c++ polymorphism multiple-inheritance

6
推荐指数
2
解决办法
8233
查看次数

是否有任何意义避免在Mono中使用"不安全"?

我最近遇到了这样一个事实:在使用C#/ Mono中的某些概念时,我需要指定"不安全"选项.我不仅需要在我的代码中指定选项,我还必须在编译时指定它,这会调用"此代码本质上不安全且使用风险"的感觉.这里奇怪的是DllImport不需要不安全标志,所以我可以在我的"安全代码"中创建我想要的段错误.有没有理由避免我忽略的不安全代码?

c# mono unsafe

5
推荐指数
1
解决办法
802
查看次数

GPL下的Java库

如果GPL下的java库以.jar的形式发布,那么专有项目是否可以在其应用程序分发中包含此.jar并使用它中的类?

java gpl

5
推荐指数
0
解决办法
2128
查看次数

如何将内存写入文件缓冲区变异呢?

有一段时间了,在尝试用C++写入文件缓冲区时,我遇到了一个非常奇怪的问题.问题只发生在MinGW上.当我在gcc/linux下编译时,一切都很好.

调试会话显示问题

基本上,我正在将代码从内存缓冲区写入文件缓冲区,文件中的二进制表示最终与我编写的内存不同.不,以后没有修改该文件,我通过使用调试器在关闭文件后退出程序来确保这一点.我不知道这样的事情怎么可能,我甚至用valgrind来看看是否有任何内存分配问题,但是没有.

我将粘贴一些相关的代码.

/// a struct holding information about a data file
class ResourceFile {
public:
    string name;
    uint32 size;
    char* data;

    ResourceFile(string name, uint32 size);
};

ResourceFile::ResourceFile(string name, uint32 size)
    : name(name), size(size)
{
    // will be free'd in ResourceBuilder's destruction
    data = (char*) malloc(size * sizeof(char));
}


/// Build a data resource from a set of files
class ResourceBuilder {
public:
    ofstream out; ///< File to put the resource into
    vector<ResourceFile> input; ///< List of input strings …
Run Code Online (Sandbox Code Playgroud)

c c++ memory file

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

我可以让Scala在这里推断出Option类型吗?

我想调用泛型函数f[X](...),在我的情况下X恰好是Option[Y].我尝试传递两者Some[...]None函数所期望的位置X,但Scala坚持认为它X是类型Some[Y].

  def flattenOptionMap[A, B](input : Map[A, Option[B]]) : Option[Map[A, B]] = {
    input.foldLeft[Option[Map[A,B]]] (Some(Map.empty)) {
      case (_, (_, None)) => None
      case (None, (_, _)) => None
      case (Some(acc), (key, Some(value))) => Some(acc + (key -> value))
    }
  }
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我必须明确指定Option[Map[A,B]]应该用作泛型类型foldLeft.所有必要的类型信息都已经包含在上下文中,并且Option[Map[A,B]]在我看来,输入繁琐的类型(例如通常不必要)会大大降低我的代码的可读性.

有没有办法让Scala最终推断出类型,或者避免复制粘贴整个类型?

coding-style scala type-inference

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