我想知道无论如何我可以在Go中为未知数量的变量定义一个函数.
像这样的东西
func Add(num1... int) int {
return args
}
func main() {
fmt.Println("Hello, playground")
fmt.Println(Add(1, 3, 4, 5,))
}
Run Code Online (Sandbox Code Playgroud)
我想概括为任意数量的输入添加函数.
我在 Rust 中尝试了函数指针魔术,最终得到了一个代码片段,我完全没有解释它为什么编译,甚至更多,为什么它运行。
fn foo() {
println!("This is really weird...");
}
fn caller<F>() where F: FnMut() {
let closure_ptr = 0 as *mut F;
let closure = unsafe { &mut *closure_ptr };
closure();
}
fn create<F>(_: F) where F: FnMut() {
caller::<F>();
}
fn main() {
create(foo);
create(|| println!("Okay..."));
let val = 42;
create(|| println!("This will seg fault: {}", val));
}
Run Code Online (Sandbox Code Playgroud)
我无法解释为什么 foo通过将空指针caller(...)转换为 type 的实例来调用F。我原以为只能通过相应的函数指针调用函数,但鉴于指针本身为空,显然情况并非如此。话虽如此,似乎我显然误解了 Rust 类型系统的一个重要部分。
我正在编写一个C#应用程序来解码这个字符串:
"--W3sic3RhcnRfdGltZSI6IjAiLCJwcm9kdWN0X2lkIjoiODQwMDMzMDQiLCJ1cmwiOiIifSx7InN0YXJ0X3RpbWUiOiI3OSIsInByb2R1Y3RfaWQiOiI4NDAzNjk2MSIsInVybCI6IiJ9LHsic3RhcnRfdGltZSI6IjgyIiwicHJvZHVjdF9pZCI6Ijg0MDAzMDIwIiwidXJsIjoiIn0seyJzdGFydF90aW1lIjoiMTA5IiwicHJvZHVjdF9pZCI6IiIsInVybCI6Imh0dHBzOi8vYmxvZy5sYXJlaW5lZHVzaG9wcGluZy5jYS8yMDE3LzAxL3RyYW5zZm9ybWVyLXNlcy12aWV1eC1nYW50cy1kZS1jdWlyLWVuLTUtbWludXRlcy8ifV0 ="
当我将其复制/粘贴到此在线工具中时,它可以工作:https://www.base64decode.org
但是当我使用它时抛出一个异常Convert.FromBase64String(str):
System.FormatException:输入不是有效的Base-64字符串,因为它包含非基本64个字符,两个以上的填充字符或填充字符中的非法字符.
为什么?
为什么我需要编写mod以及use何时要将模块引入范围?
mod from_other_file;
use from_other_file::sub_module;
fn main() {
sub_module::do_something();
}
Run Code Online (Sandbox Code Playgroud)
如果我这样做,则会出现错误,因为该模块未导入到当前文件中:
use from_other_file::sub_module;
fn main() {
sub_module::do_something();
}
Run Code Online (Sandbox Code Playgroud)
错误信息:
error[E0432]: unresolved import `from_other_file`
--> src/main.rs:1:5
|
1 | use from_other_file::sub_module;
| ^^^^^^^^^^^^^^^ use of undeclared type or module `from_other_file`
Run Code Online (Sandbox Code Playgroud) 我需要chrono::Date今年一周的第一个和最后一个日期。
我有两个问题,首先我无法解析chrono今年的星期,第二我无法获得本周的第一个/最后一个日期。(这里有很多其他语言的解决方案,但没有rust)
TLDR:我需要一个这样的函数:
fn x(week: isize) -> (Date<Local>, Date<Local>)元组为(一周的第一天,一周的最后一天)。
当文本文件中的第2行具有"nope"时,它将忽略该行并继续下一行.是否有另一种方法来写这个没有使用尝试,除了?我可以使用if else语句来执行此操作吗?
文本文件示例:
0 1
0 2 nope
1 3
2 5 nope
Run Code Online (Sandbox Code Playgroud)
码:
e = open('e.txt')
alist = []
for line in e:
start = int(line.split()[0])
target = int(line.split()[1])
try:
if line.split()[2] == 'nope':
continue
except IndexError:
alist.append([start, target])
Run Code Online (Sandbox Code Playgroud) I have an existential type defined like this:
trait Collection {
type Element;
}
impl<T> Collection for Vec<T> {
type Element = T;
}
type Existential<T> = impl Collection<Element = T>;
Run Code Online (Sandbox Code Playgroud)
A function, which takes a type implementing a trait with an associated type, returns this type. Why does this code work:
fn return_existential<I, T>(iter: I) -> Existential<T>
where
I: IntoIterator<Item = T>,
I::Item: Collection,
{
let item = iter.into_iter().next().unwrap();
vec![item]
}
Run Code Online (Sandbox Code Playgroud)
while this does not:
fn return_existential<I>(iter: I) …Run Code Online (Sandbox Code Playgroud) 我有一个有向图,想找到从节点 A 到节点 B 的最短路径。我在crates.io上搜索并找到了petgraph,它看起来像是最受欢迎的 crate。它实现了许多算法,但没有一个能解决我的任务。我错过了什么?
例如,Dijkstra 算法返回路径成本,但哪条路径的成本最低?该Bellman-Ford算法返回路径成本和节点,但没有路径。
这是我发现从图中打印路径的最简单方法:
extern crate petgraph;
use petgraph::prelude::*;
use petgraph::algo::dijkstra;
fn main() {
let mut graph = Graph::<&str, i32>::new();
let a = graph.add_node("a");
let b = graph.add_node("b");
let c = graph.add_node("c");
let d = graph.add_node("d");
graph.extend_with_edges(&[(a, b, 1), (b, c, 1), (c, d, 1), (a, b, 1), (b, d, 1)]);
let paths_cost = dijkstra(&graph, a, Some(d), |e| *e.weight());
println!("dijkstra {:?}", paths_cost);
let …Run Code Online (Sandbox Code Playgroud) 我主要在Linux上工作,但我也有一个Windows VM,主要用于在Windows上运行单元测试.
在Linux中,我有一个Git存储库,可以使用VirtualBox共享文件夹从Windows VM访问.我不在Windows上使用Git,除了我们的构建系统,它记录当前的Git哈希以将其包含在可执行文件中(运行git describe --always --dirty).
现在,每次我在Linux或Windows上使用Git,然后再在另一个系统上使用Git,它需要一段时间.例如:
Linux$ git status
Linux$ git status # fast (<1s)
Windows$ git status # takes a few dozen seconds
Windows$ git status # fast (<1s)
Linux$ git status # takes a few seconds
Linux$ git status # fast (<1s)
Run Code Online (Sandbox Code Playgroud)
我有什么办法可以防止这种情况发生吗?我可以在Windows上关闭Git功能,因为它只需要获取哈希值.但是我无法改变获取此哈希的方式,因为这在构建系统中很深.我也不希望在Linux和Windows上有单独的存储库并且彼此提交/推送,因为这会导致更大的开销.
Linux git版本:2.11.0.
Windows git版本:2.14.1.windows.1.
当我尝试使用 to_string()将ethereum_types::H256转换 为String时
\n\nuse ethereum_types::H256;\n\nfn main() { \n let s = H256::zero();\n println!("{}", s);\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我期望输出是
\n\n"0x0000000000000000000000000000000000000000000000000000000000000000" \nRun Code Online (Sandbox Code Playgroud)\n\n但输出是
\n\n"0x0000\xe2\x80\xa60000"\nRun Code Online (Sandbox Code Playgroud)\n