采取以下代码片段:
import { Foo } from "./foo";
export interface MyContext extends Mocha.Context {
foo: Foo;
}
Run Code Online (Sandbox Code Playgroud)
这是在安装了@types/mocha包的项目中,以便Mocha编译器可以推断命名空间。
现在,如果我尝试在测试套件中使用此接口:
import { MyContxt } from "../types/mocha";
describe("my test suite", function() {
it("should do something", function(this: MyContext) {
...
});
});
Run Code Online (Sandbox Code Playgroud)
TypeScript 编译器抛出以下错误:
没有重载与此调用匹配。
我查找了源代码,似乎 mocha 期望传递给before、beforeEach、it等钩子的任何函数都链接到Context中定义的类型@types/mocha- 它不接受任何后代类型。
如何解决这个问题并在我的测试环境中扩展 Mocha Context 接口?
这是无论如何Context的文档:
/// Wrap the error value with additional context.
fn context<C>(self, context: C) -> Result<T, Error>
where
C: Display + Send + Sync + 'static;
Run Code Online (Sandbox Code Playgroud)
/// Wrap the error value with additional context that is evaluated lazily
/// only once an error does occur.
fn with_context<C, F>(self, f: F) -> Result<T, Error>
where
C: Display + Send + Sync + 'static,
F: FnOnce() -> C;
Run Code Online (Sandbox Code Playgroud)
在实践中,不同之处在于with_context需要一个闭包,如无论如何的README所示:
use anyhow::{Context, Result};
fn main() -> Result<()> { …Run Code Online (Sandbox Code Playgroud) 我阅读了有关与缓存数据交互的文档,虽然我了解如何cacheRedirects工作,但我有点困惑为什么首先需要它。这就是我问另一个问题的部分原因:Apollo 客户端是否缓存 React 中的嵌套对象?
我们知道数据很可能已经在客户端缓存中,但由于它是通过不同的查询请求的,Apollo 客户端并不知道这一点。
这是为什么?
为了清楚起见,复制粘贴文档中的示例:
query ListView {
books {
id
title
abstract
}
}
query DetailView {
book(id: $id) {
id
title
abstract
}
}
Run Code Online (Sandbox Code Playgroud) 采用以下代码片段(必须在货物中运行,以便您可以将serde功能添加到num-bigint):
use num_bigint::BigInt;
use serde_derive::Deserialize;
use std::collections::HashMap;
#[derive(Debug, Deserialize)]
pub struct Trade<'a> {
pub id: &'a str,
pub price: BigInt,
pub quantity: BigInt,
}
#[derive(Debug, Deserialize)]
pub struct TradeTable<'a> {
pub trades: Vec<Trade<'a>>,
}
fn main() {
let mut ether_trades: Vec<Trade> = Vec::new();
ether_trades.push(Trade {
id: "#1",
price: BigInt::from(100),
quantity: BigInt::from(2)
});
let mut trades: HashMap<&str, Vec<Trade>> = HashMap::new();
trades.insert("ETH", ether_trades);
println!("trades: {}", trades);
}
Run Code Online (Sandbox Code Playgroud)
编译时会出现此错误:
error[E0495]: cannot infer an appropriate lifetime for lifetime parameter `'de` …Run Code Online (Sandbox Code Playgroud) NODE_ENV当我在开发节点 ( ) 中构建 React 应用程序时,我想手动更改环境变量的值yarn run start。
摘自Rust 书的第 3.5 章:
我们使用
break带有 value的关键字counter * 2。在循环之后,我们使用分号结束为 赋值的语句result。
加上代码片段:
fn main() {
let mut counter = 0;
let result = loop {
counter += 1;
if counter == 10 {
break counter * 2;
}
};
println!("The result is {}", result);
}
Run Code Online (Sandbox Code Playgroud)
我明白这是如何工作的以及为什么结果是 20,但我注意到如果我删除包含break关键字的行上的分号,程序是等效的。
为什么在这种情况下分号是可选的?
完全按值捕获也比按引用捕获更通用:引用类型在 Rust 中是一流的,因此“按引用捕获”与“按值捕获引用”相同。因此,与 C++ 不同,按引用捕获和按值捕获之间几乎没有根本区别,而且 Rust 所做的分析实际上并不是必需的:它只是让程序员的生活更轻松。
我努力想办法解决这个问题。如果您“按值”捕获引用,您不捕获存储在堆上的数据吗?或者它是否引用了在堆栈中找到的引用的指针值?
我的代码看起来像这样:
// my_path is of type "PathBuf"
match my_path.parent() {
Some(Path::new(".")) => {
// Do something.
},
_ => {
// Do something else.
}
}
Run Code Online (Sandbox Code Playgroud)
但我收到以下编译器错误:
expected tuple struct or tuple variant, found associated function `Path::new`
for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
Run Code Online (Sandbox Code Playgroud)
我读了Rust 书中的第 18 章,但我不知道如何使用Path和PathBuf类型来修复我的特定场景。
如何通过检查特定值(如 )来进行模式匹配Option<&Path>(根据文档,这是方法返回的内容) ?parentPath::new("1")
我需要./在我的代码中添加路径,我目前正在这样做:
let path = Path::new("foo.sol");
let path_with_dot = Path::new("./").join(path);
Run Code Online (Sandbox Code Playgroud)
但是,我想./在路径前面添加的同时保持跨多个平台的兼容性。我怎样才能做到这一点?
我编写了一个机器人,它每隔一段时间执行一次网络查询,并将最新状态转储到存储在磁盘上的文件中。这是我的代码:
let log_file = OpenOptions::new()
.read(true)
.write(true)
.create(true)
.open(&log_file_name)
.unwrap();
serde_json::to_writer(
log_file,
&State {
foo: self.foo,
bar: self.bar
},
)
.unwrap();
Run Code Online (Sandbox Code Playgroud)
问题是,有时,最新状态 json 的大小会小于先前状态 JSON 的大小。这使得前一个状态 JSON 中比新状态 JSON 长的部分保留在日志文件中:
{"foo": 1,"bar": 2}"baz": 3}
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,"baz": 3}是来自先前状态 JSON 的剩余数据。
问题是:如何重写代码,以便首先刷新文件的所有内容,然后编写新的状态 json?
我知道删除文件是一种解决方案,但我不想这样做。