小编Pet*_*ter的帖子

JavaScript:调用存储在变量中的函数时访问“ this”

我是JavaScript新手,所以这可能是一个琐碎的问题:

我正在尝试构造一个对象,该对象存储从一组整数到其某些方法的映射,即像这样的东西:

'use strict';

function Foo() {
    this.funcs = {
        1: this.func1,
        2: this.func2,
    }
}

Foo.prototype.func1 = function() {
    this.prop = 1;
}

Foo.prototype.func2 = function() {
    this.prop = 2;
}
Run Code Online (Sandbox Code Playgroud)

然后,我希望能够调用如下方法Foo

foo = new Foo();
var func = foo.funcs[1];
func();
Run Code Online (Sandbox Code Playgroud)

但这导致:Cannot set property 'prop' of undefined,即this不引用foo

这是什么问题,有没有更好的方法来实现呢?

javascript

13
推荐指数
2
解决办法
607
查看次数

如何在 clang 的 AST 中找到隐式删除的默认构造函数?

考虑以下结构体定义foo.cc

struct Foo
{
  int &bar;
};
Run Code Online (Sandbox Code Playgroud)

因为bar具有引用类型,所以隐式普通默认构造函数Foo::Foo()被隐式删除。然而,这个事实似乎并没有反映在 clang 生成的 AST 中。例如,运行clang -Xclang -ast-dump foo.cc结果为:

struct Foo
{
  int &bar;
};
Run Code Online (Sandbox Code Playgroud)

所以这里看起来像存在一个隐式的普通默认构造函数,但没有提到它被删除。同样,clang::CXXRecordDeclAPI 似乎也没有提供确定这一点的方法。但此时(语义分析之后)该信息不应该可用吗?如何使用 clang AST API 来查明某个类的隐式普通默认构造函数是否被隐式删除?

c++ clang abstract-syntax-tree libtooling

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

为什么"yes | sleep 10"管道不会失败

在考虑如何在我自己的一个程序中实现某个功能时,我一直想知道bash如何在内部处理以下性质的管道:

yes | sleep 10
Run Code Online (Sandbox Code Playgroud)

这显然什么也没做,但我不明白这不会导致错误.我原以为:

  • 因为sleep没有从stdin读取,连接两个进程的管道将填满并导致yes在它尝试写入现在的完整管道时无限期地阻塞

  • 如果使用非阻塞IO,如果yes先执行并在sleep进程运行之前写入管道,则会发生错误,因此没有进程连接到管道的读取端

我想这是我的一些重大误解.我已经尝试过查看bash源代码,但这已经过去了.

bash pipe

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

使 cmake 的 find_package(Boost ...) 在 conda 环境中查找标头

我正在尝试通过 CMake 在 Linux 上构建一个依赖于 Boost 的项目。该项目的 CMakeLists.txt 包含以下行:

find_package(Boost 1.46 REQUIRED COMPONENTS system thread filesystem)
Run Code Online (Sandbox Code Playgroud)

出于可重复性的原因,我已经通过安装了所需的 Boost 标头,conda install libboost以便它们位于 ~/anaconda3/envs/.../include/boost而不是位于/usr/local/include. 不是当我运行时cmake,我收到如下错误:

CMake Warning at /usr/share/cmake-3.7/Modules/FindBoost.cmake:761 (message):
  Imported targets not available for Boost version
Call Stack (most recent call first):
  /usr/share/cmake-3.7/Modules/FindBoost.cmake:865 (_Boost_COMPONENT_DEPENDENCIES)
  /usr/share/cmake-3.7/Modules/FindBoost.cmake:1470 (_Boost_MISSING_DEPENDENCIES)
  cmake/Dependencies.cmake:5 (find_package)
  CMakeLists.txt:43 (include)
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能让 CMake 找到我的 Boost 标头?

boost cmake anaconda

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

git apply 失败并出现错误:搜索时

git apply --check -v我创建的补丁上运行时,我收到几个error: while searching for: ...错误。但是有问题的行肯定存在于受影响的文件中(文件路径也是正确的)。

不幸的是,我不能在这里发布补丁。有没有人以前经历过类似的事情,可以告诉我可能导致这种情况的原因吗?

git

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

GNU readline:巨大的内存泄漏

考虑以下代码段:

#include <stdio.h>
#include <stdlib.h>
#include <readline/readline.h>

int main() {
    for (;;) {
        char *buf = readline(">>> ");
        if (!buf)
            break;

        free(buf);
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的系统上,使用valgrinds进行编译-lreadline,在其下执行程序valgrind并输入一些行会导致巨大的内存泄漏,如下所示:

#include <stdio.h>
#include <stdlib.h>
#include <readline/readline.h>

int main() {
    for (;;) {
        char *buf = readline(">>> ");
        if (!buf)
            break;

        free(buf);
    }
}
Run Code Online (Sandbox Code Playgroud)

运行--show-leak-kinds=all类似这样的结果(整个过程长数百行,我只显示开始):

==7651== LEAK SUMMARY:
==7651==    definitely lost: 0 bytes in 0 blocks
==7651==    indirectly lost: 0 bytes in 0 blocks
==7651==      possibly lost: 0 bytes in …
Run Code Online (Sandbox Code Playgroud)

c gnu readline

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

在 CPU 上运行 Tensorflow 时抑制 OpenMP 调试消息

当在 Linux 上运行包含import tensorflow(安装时不支持 GPU)的 Python 程序时,即使从未调用过 tensorflow 模块中的任何函数,也会将一堆 OpenMP 调试消息写入标准输出。这是摘录:

OMP: Info #212: KMP_AFFINITY: decoding x2APIC ids.
OMP: Info #210: KMP_AFFINITY: Affinity capable, using global cpuid leaf 11 info
OMP: Info #154: KMP_AFFINITY: Initial OS proc set respected: 0-3
OMP: Info #156: KMP_AFFINITY: 4 available OS procs
OMP: Info #157: KMP_AFFINITY: Uniform topology
Run Code Online (Sandbox Code Playgroud)

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'导入 tensorflow 之前的设置不会消除这些消息,我该如何抑制它们(来自 Python)?

python openmp tensorflow

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

转义引号并删除fortran中的双换行符

我正在尝试在Fortran90中输出一个简单的错误消息,如下所示:

error: failed to read '<file>'
Run Code Online (Sandbox Code Playgroud)

但是我不知道如何产生单引号,将其转义会导致编译错误。我尝试了以下方法:

write(*, fmt="('error: failed to read: \'', a, '\'')") arg
Run Code Online (Sandbox Code Playgroud)

另外,如果我打印的消息没有它们:

write(*, fmt="('error: failed to read: ', a)") file
Run Code Online (Sandbox Code Playgroud)

在命令行上会产生一个额外的换行符(即总共两个)。我arg通过执行获得call getarg(1, arg),也许与它有关。

这是一个最小的工作示例,它演示了换行问题:

program foo                                                        
    character(len=100) :: arg

    call getarg(1, arg)

    write(*, fmt="('error: failed to read: ', a)") arg
end program foo
Run Code Online (Sandbox Code Playgroud)

如果有人可以将我定向到更详细地说明这一点的资源,那我会发现fortran中的格式化输出非常不直观。

fortran fortran90

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

类类型非类型模板参数初始化不编译

我的印象是以下内容应该成为新的 C++20 标准下的有效代码:

struct Foo
{
  int a, b;
};

template<Foo>
struct Bar
{};

Bar<{.a=1, .b=2}> bar;
Run Code Online (Sandbox Code Playgroud)

然而,gcc 10.2.0,-std=c++20设置抱怨:could not convert ‘{1, 2}’ from ‘<brace-enclosed initializer list>’ to ‘Foo’和 Clang 也不能编译这个片段。有人可以指出为什么它没有很好地形成吗?

c++ gcc language-lawyer c++20

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

std::bind 不能与 lua_call 互操作

使用 Lua 5.3.5 和 gcc 9.2.0 的开发库我遇到了以下最小片段的奇怪编译问题:

#include <functional>

extern "C" {
  #include "lua.h"
  #include "lualib.h"
}

int main()
{
  using namespace std::placeholders;

  auto lua_simple_call = std::bind(lua_call, _1, 0, 0);
}
Run Code Online (Sandbox Code Playgroud)

gcc 抱怨:error: ‘lua_call’ was not declared in this scope. 尝试在lua_call不使用的情况下简单调用时不会发生此问题,std::bind并且其他 Lua C 函数(如lua_newtable等)似乎也不会发生此问题。我想知道是什么导致了这种情况以及如何规避它。

c++ lua c++11

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