小编dol*_*hin的帖子

类方法返回`this`是不好的做法吗?

public class Chain
{
    public string ChainString;

    public Chain() 
    {
        ChainString = "{}"; 
    }

    public Chain AddLink()
    {
        ChainString += "-{}";
        return this; // is this a bad idea?
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,该AddLink方法返回this. 我想这样做的原因是为了更易读的实例化,如下所示。

// more verbose (here, `AddLink` returns void)
Chain myChain = new Chain();
myChain.AddLink();
myChain.AddLink();
myChain.AddLink();
// myChain.ChainString = "{}-{}-{}-{}"
Run Code Online (Sandbox Code Playgroud)
// nicer
Chain myChain = new Chain()
    .AddLink()
    .AddLink()
    .AddLink();
// myChain.ChainString = "{}-{}-{}-{}"
Run Code Online (Sandbox Code Playgroud)

有什么理由我不应该这样做吗?我想不出任何,但感觉有点hacky,我还没有看到它在其他地方完成。

c# oop return fluent this

10
推荐指数
1
解决办法
211
查看次数

块分配器、堆栈分配器和临时分配器之间有什么区别?

迈克·阿克顿 (Mike Acton)在他的演讲“为引擎开发人员解决正确的问题”中说

绝大多数时候,您所需要的只是这三种类型的分配器:块分配器、堆栈分配器和临时分配器

但是,他没有详细说明这些类型的分配器之间的差异。

我认为“堆栈分配器”只是一个基于堆栈的分配器,但我听说过的所有其他类型(包括“arena”)听起来像是做同样事情的奇特方法,即“分配一个大块”并以一种有效的方式将其分成块,然后在完成后释放它”

那么,这些分配器之间有什么区别,各自的优点是什么,为什么我“绝大多数时候”只需要这三个?

c c++ memory-management game-engine allocator

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

尽管已安装,但无法导入 python 模块

我已经安装plotly.expresspandas使用:

pip install plotly-express
Run Code Online (Sandbox Code Playgroud)

pip install pandas
Run Code Online (Sandbox Code Playgroud)

我尝试将这些模块导入到我的程序中

pip install plotly-express
Run Code Online (Sandbox Code Playgroud)

但是,我ModuleNotFoundError在运行时得到了这两个软件包。


我曾尝试使用替代安装,如:

py -3 -m pip install plotly-express
python -m pip install plotly-express
py -m pip install plotly-express
Run Code Online (Sandbox Code Playgroud)

当我再次尝试安装这些软件包时,他们说c:\python38\lib\site-packages. 我所有的其他软件包都安装在C:\Users\Oli\AppData\Local\Programs\Python\Python38-32\Lib\site-packages(我是 Oli !)。

我想这可能是问题所在。我读过直接插入这些文件是个坏主意。

我怎样才能让这些进口工作?

python pip python-3.x pandas plotly-python

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

Rust 中的 `str` 有什么用处吗?

str没有不借就用的情况?这甚至有意义吗?

我明白之间的差别String&str,但由于有&str也必须有str

string ownership rust

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

clang-format AlignAfterOpenBracket 列表参数

这篇文章提出了一个类似的问题,关于当参数太多时如何修改格式。

我非常喜欢 rust-fmt 的风格。有没有办法用 clang-format 做到这一点?

例如1:与AlignAfterOpenBrackets: AlwaysBreak

return_t foo(
    some_t param_1, some_t param_2, some_t param_3, 
    some_t param_4) {
    // function body
}
Run Code Online (Sandbox Code Playgroud)

例如 2:所需的格式

return_t foo(
    some_t param_1, 
    some_t param_2, 
    some_t param_3, 
    some_t param_4
) {
    // function body
}
Run Code Online (Sandbox Code Playgroud)

c++ clang clang-format

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

如何在 React 中创建带有开始和结束标记的 DOM 组件?

在这里,我创建了一个组件 SomeComponent

const SomeComponent = () => (
    <div className={"some-class"}>
        some text here
    </div>
)
Run Code Online (Sandbox Code Playgroud)

我可以像这样使用这个组件:

<SomeComponent text={"here is some text"} />
Run Code Online (Sandbox Code Playgroud)

我想做同样的事情,但有一个开始和结束标签,如下所示:

<SomeComponent>
    here is some text
</SomeComponent>
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

非常感谢 - 奥利

javascript jsx reactjs

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

Lua 对象不仅仅是表?

我对 Lua 很陌生,正在尝试使用Aseprite API编写一个简短的脚本。
API 使用Image对象来表示图像。

我对 Lua 中 OOP 的理解是,一切都只是一张表。没有类或对象,只有返回表的函数。

我想,然后我将能够查看Image对象的所有属性,只需使用pairs(table).

-- `image` is and Image object
for attribute, value in pairs(image) do
   app.alert(k..": "..v) -- creates an alert window in the Aseprite app
end
Run Code Online (Sandbox Code Playgroud)

我希望这能显示每个可用的属性和方法名称。相反,我只是收到一个错误:

lua:2: bad argument #1 to 'for iterator' (table expected, got ImageObj)
Run Code Online (Sandbox Code Playgroud)

这怎么可能不仅仅是一张桌子?这是什么?我如何在这个“对象”中打印所有可用的属性和方法名称?

oop lua

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

为什么“mem::forget”盒子被认为是安全的?

以下代码创建框,每个框都指向 4096 字节的块。如果我在发布时运行它,一切都会被优化掉:(,但在调试时,这会按预期运行并泄漏大量内存......或者是吗?

fn main() {
    for _ in 0..1000 {
        for _ in 0..100000 {
            let b = Box::new([!0u64; 1 << 10]);
            std::mem::forget(b);
        }
        let mut buf = String::new();
        let _ = std::io::stdin().read_line(&mut buf);
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么这不被认为是不安全的?

unsafe rust

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

用于将模板专业化委托给默认实现的惯用 C++11

我正在制作一个Box<T>处理一些数据的结构。具体细节并不重要。
然而,一个重要的注意事项是Box<T>可以存储指针,但也可能不能。所以 和Box<int>都是Box<int *>有效的。显然,如果我们拥有Box.data,我们将需要delete数据(如果它是指针类型)。这是我想出的适用于 C++11 的解决方案:

template <typename T> struct BoxTraits;

template <typename T> struct Box {
    using traits_t = BoxTraits<T>;

    T data;

    ~Box() = default; // not required, I know

    T get_data() { return traits_t::get_data(this); }
};

template <typename T> struct Box<T *> {
    using traits_t = BoxTraits<T *>;

    T *data;

    ~Box() { delete data; }

    T *get_data() { return traits_t::get_data(this); }
};

template <typename T> struct …
Run Code Online (Sandbox Code Playgroud)

c++ templates c++11

0
推荐指数
1
解决办法
72
查看次数