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,我还没有看到它在其他地方完成。
迈克·阿克顿 (Mike Acton)在他的演讲“为引擎开发人员解决正确的问题”中说
绝大多数时候,您所需要的只是这三种类型的分配器:块分配器、堆栈分配器和临时分配器
但是,他没有详细说明这些类型的分配器之间的差异。
我认为“堆栈分配器”只是一个基于堆栈的分配器,但我听说过的所有其他类型(包括“arena”)听起来像是做同样事情的奇特方法,即“分配一个大块”并以一种有效的方式将其分成块,然后在完成后释放它”
那么,这些分配器之间有什么区别,各自的优点是什么,为什么我“绝大多数时候”只需要这三个?
我已经安装plotly.express
并pandas
使用:
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 !)。
我想这可能是问题所在。我读过直接插入这些文件是个坏主意。
我怎样才能让这些进口工作?
有str
没有不借就用的情况?这甚至有意义吗?
我明白之间的差别String
和&str
,但由于有&str
也必须有str
?
这篇文章提出了一个类似的问题,关于当参数太多时如何修改格式。
我非常喜欢 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) 在这里,我创建了一个组件 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)
我怎样才能做到这一点?
非常感谢 - 奥利
我对 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)
这怎么可能不仅仅是一张桌子?这是什么?我如何在这个“对象”中打印所有可用的属性和方法名称?
以下代码创建框,每个框都指向 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)
为什么这不被认为是不安全的?
我正在制作一个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)