小编bey*_*kay的帖子

Rust 特征具有由实现定义的常量字段

设置

我希望能够定义一个特征,使得任何实现该特征的结构不仅必须实现函数,而且还必须指定某些常量的值。所以也许是这样的:

trait MyTrait {
    const MY_CONST: u8;
    fn foo();
    fn bar();
}
Run Code Online (Sandbox Code Playgroud)

然后结构看起来像这样:

struct MyFirstStruct {
    const MY_CONST: u8 = 42;
    ...
}
impl MyTrait for MyFirstStruct {
    fn foo() {...}
    fn bar() {...}
}
Run Code Online (Sandbox Code Playgroud)

这样,当我稍后实现 时MySecondStructMyThirdStruct它们可以分别具有不同的值MY_CONST,但每个实例都MyFirstStruct将具有相同的值MY_CONST,并且每个实例MySecondStruct也将具有相同的值MY_CONST(这可能与 的值不同,也可能不不同)MY_CONST为了MyFirstStruct

这可能吗?

我尝试过的

我已经尝试了在块中指定常量的各种组合impl MyTrait for MyFirstStruct,在块中指定它struct MyFirstTrait,但似乎无法弄清楚。

在线搜索似乎总是落在 rust book (它没有描述这样的东西)、rust by example高级特征 rust book Chapter …

traits rust

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

`vi{` 增加了视觉选择,但是我可以以类似的方式减少视觉选择吗?

所以如果我有这样的文字:

if answer == 42 {                        #1
    if bugs == 'bunny' {                 #2
        if injury == 'but a scratch' {   #3
            // do the thing              #4
        }                                #5
    }                                    #6
}                                        #7
Run Code Online (Sandbox Code Playgroud)

我将光标放在上面// do the thing并执行va{命令,然后我将从第 3 行到第 5 行中选择{},如果a{再次这样做,我将从第 2 行到第 6 行中选择{}

但是哦,不,我现在意识到我实际上只想选择{}第 3 行到第 5 行。令我恐惧的是,通常的 vim 方法capitalisation => opposite不起作用,A{只是将 a 附加{到行尾。

我可以从一个大的选择转到一个较小的选择,而不取消选择、移动光标并重新进行吗?hjklwbeo在此示例中,使用其中的一些手动更改选择也很简单,但实际上代码块很长且不平凡。

我知道,如果一个父块中有多个兄弟块,那么这将是不明确的,但我很乐意只选择第一个,因为这种情况很少发生在我身上。

谢谢!

编辑:执行此操作的插件将是一个不错的选择。如果看起来不存在,那么我将制作一个快速 MVP …

vim neovim

6
推荐指数
2
解决办法
481
查看次数

Rust `format!()` 像 python 的 `f"{variable=}" 那样打印 `variable=value`

在 python 中,我可以在=格式化参数后包含一个来打印变量的值以及变量名称:

var = 10
f"{var=}" # -> "var=10"
Run Code Online (Sandbox Code Playgroud)

有没有办法在 Rust 中使用format!()宏来做到这一点?我知道 dbg!宏,但该字符串将显示进度条和 dbg!不返回字符串。

我想要类似format!("{var:=}")或也许的东西format!("{var=}"),但这些都不起作用。

澄清一下,我不想输入变量名称,但仍将其打印出来。例如,如果我打印一长行变量,例如:

println!("variable1={variable1}, variable2={variable2}, variable3={variable3}, variable4={variable4}");
Run Code Online (Sandbox Code Playgroud)

显式写出变量名称很快就会过时,如果我重命名该变量,那么 rust-analyzer 不会拾取该字符串,并且会给我留下类似"old_name={new_name}".

这是一件小事,但我发现f"{var1=}"在 python 中非常有用。

format rust

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

Haskell 获取当前时间作为 ISO8601 字符串

我已经尝试了一些可以在网上找到的方法来将当前时间打印为 ISO8601 字符串,但没有一个起作用:

\n
    \n
  1. 这个答案假设您已经知道如何获取当前时间,但我无法弄清楚。

    \n

    我不断收到错误,Could not find module \xe2\x80\x98System.Locale\xe2\x80\x99因为它似乎System.Locale已被弃用/默认情况下不再安装

    \n

    我尝试安装old-local,但这给了我新的错误,我认为是由于time和 之间的不兼容造成的old-locale

    \n
    \xe2\x80\xa2 Couldn\'t match expected type \xe2\x80\x98time-1.9.3:Data.Time.Format.Locale.TimeLocale\xe2\x80\x99\n              with actual type \xe2\x80\x98System.Locale.TimeLocale\xe2\x80\x99\n  NB: \xe2\x80\x98time-1.9.3:Data.Time.Format.Locale.TimeLocale\xe2\x80\x99\n        is defined in \xe2\x80\x98Data.Time.Format.Locale\xe2\x80\x99 in package \xe2\x80\x98time-1.9.3\xe2\x80\x99\n      \xe2\x80\x98System.Locale.TimeLocale\xe2\x80\x99\n        is defined in \xe2\x80\x98System.Locale\xe2\x80\x99 in package \xe2\x80\x98old-locale-1.0.0.7\xe2\x80\x99\n\xe2\x80\xa2 In the first argument of \xe2\x80\x98formatTime\xe2\x80\x99, namely \xe2\x80\x98defaultTimeLocale\xe2\x80\x99\n  In the expression: formatTime defaultTimeLocale "%FT%T%QZ"\n  In an equation for \xe2\x80\x98iso8601\xe2\x80\x99:\n      iso8601 = formatTime defaultTimeLocale "%FT%T%QZ"\n …
    Run Code Online (Sandbox Code Playgroud)

haskell iso8601 haskell-stack

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

Vim 转到下一个搜索结果并直观地选择它

通常,如果我有一个像points.length - 1and 这样的代码表达式,我想用一个变量替换它(例如,命名,target_idx那么我将定义该变量:

int target_idx = points.length - 1;
Run Code Online (Sandbox Code Playgroud)

但现在我想用 替换所有points.length - 1实例target_idx。我知道我可以这样做:%s/points.length - 1/target_idx/g,但我对我的正则表达式不太有信心,并且不想错误地替换points.length - 11points+length - 1错误地替换。(我也知道非常神奇的搜索,但对它考虑/不考虑特殊字符的所有微妙之处也不是很有信心)

所以我想要的是能够搜索与points.length - 1via匹配的实例/points.length - 1,然后使用 遍历搜索结果n,然后将文本替换为target_idx

但由于搜索的文本可能包含空格或其他字符,因此我不能简单地更改为单词的末尾,cE因为这只会points.length在我的示例中发生变化。

是否存在到达搜索文本末尾的文本动作?

这样我就可以走了

  1. n
  2. c<special text motion here>
  3. target_idx
  4. 从 1 开始重复。

我正在使用安装了 CoC 的 neovim,因此我对插件或语言服务器替换的更深入的想法持开放态度,但这感觉应该是一个我只是不知道的简单文本动作。

vim neovim coc.nvim

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

标签 统计

neovim ×2

rust ×2

vim ×2

coc.nvim ×1

format ×1

haskell ×1

haskell-stack ×1

iso8601 ×1

traits ×1