小编Tim*_*ost的帖子

为什么引入dyn语法?

Rust 1.27.0中引入了一种新语法 - dyn添加了关键字.

  // old => new
  Box<Foo> => Box<dyn Foo>
  &Foo => &dyn Foo
  &mut Foo => &mut dyn Foo
Run Code Online (Sandbox Code Playgroud)

它实际上做了什么以及它为什么被添加?

syntax keyword rust

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

如何仅获取当前可执行文件路径的目录部分?

我想从可执行文件所在目录的 config 文件夹中读取文件。我使用以下功能来做到这一点:

use std::env;

// add part of path to te path gotten from fn get_exe_path();
fn get_file_path(path_to_file: &str) -> PathBuf {
    let final_path = match get_exe_path() {
        Ok(mut path) => {
            path.push(path_to_file);
            path
        }
        Err(err) => panic!("Path does not exists"),
    };
    final_path
}

// Get path to current executable
fn get_exe_path() -> Result<PathBuf, io::Error> {
    //std::env::current_exe()
    env::current_exe()
}
Run Code Online (Sandbox Code Playgroud)

就我而言,get_exe_path()将返回C:\Users\User\Documents\Rust\Hangman\target\debug\Hangman.exe

随着get_file_path("Config\test.txt"),我想附加Config\test.txt到上述路径。然后我得到文件的以下路径:C:\Users\User\Documents\Rust\Hangman\target\debug\Hangman.exe\Config\test.txt

问题是它std::env::current_exe()也会获得可执行文件的文件名,而我不需要那个。我只需要它所在的目录。

以下函数调用应返回C:\Users\User\Documents\Rust\Hangman\target\debug\Config\test.txt

let path …
Run Code Online (Sandbox Code Playgroud)

directory file path rust

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

为具有反序列化特征绑定的泛型的类型派生反序列化时,无法推断类型参数的类型

我使用可序列化和反序列化的泛型。但是,派生属性上存在错误,Deserialize表明无法推断类型。

结构体和枚举都会引发编译错误。评论其中之一不会解决任何问题。

use serde::{Deserialize, Serialize}; // 1.0.104

#[derive(Serialize, Deserialize)]
struct Jhon<A>
where
    A: Serialize + for<'a> Deserialize<'a>,
{
    foo: Foo<A>,
}

#[derive(Serialize, Deserialize)]
enum Foo<A>
where
    A: Serialize + for<'a> Deserialize<'a>,
{
    A,
    B(A),
}
Run Code Online (Sandbox Code Playgroud)
use serde::{Deserialize, Serialize}; // 1.0.104

#[derive(Serialize, Deserialize)]
struct Jhon<A>
where
    A: Serialize + for<'a> Deserialize<'a>,
{
    foo: Foo<A>,
}

#[derive(Serialize, Deserialize)]
enum Foo<A>
where
    A: Serialize + for<'a> Deserialize<'a>,
{
    A,
    B(A),
}
Run Code Online (Sandbox Code Playgroud)

操场

rust

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

如何在Rust库中运行清理代码?

我正在制作一个跨平台终端库.因为我的库改变了终端的状态,所以我需要恢复进程结束时对终端所做的所有更改.我现在正在实现此功能,并思考如何在最后恢复到原始终端状态的方法.

我认为在程序启动时初始化静态变量,并且当程序结束时,这个静态变量将被销毁.由于我的静态变量是一个已经实现了Drop特征的结构,它将在程序结束时被删除,但事实并非如此,因为字符串"drop called"从不打印:

static mut SOME_STATIC_VARIABLE: SomeStruct = SomeStruct { some_value: None };

struct SomeStruct {
    pub some_value: Option<i32>,
}

impl Drop for SomeStruct {
    fn drop(&mut self) {
        println!("drop called");
    }
}
Run Code Online (Sandbox Code Playgroud)

drop()程序结束时为什么不调用?我的想法是错的,我应该采取另一种方式吗?

static destroy rust

5
推荐指数
2
解决办法
289
查看次数

Swagger 异步控制器生成

对于一个项目,我使用 swagger hub 来构建我的 API。我从 swagger hub 生成服务器代码。但是,当生成此代码时,它具有同步控制器。有没有办法在 swagger.yml 中指定生成异步控制器而不是同步控制器?

  • 开放API 3.0.0
  • Aps.net核心

生成:

public virtual IActionResult GetUserById([FromRoute][Required]string userId) { }
Run Code Online (Sandbox Code Playgroud)

应该

public virtual Task<IActionResult> GetUserById([FromRoute][Required]string userId) { }
Run Code Online (Sandbox Code Playgroud)

c# asynchronous swagger swagger-editor asp.net-core

5
推荐指数
0
解决办法
904
查看次数

IDENTITY_INSERT SQL脚本

情况

我有一个SQL脚本,我需要将一些基本数据推送到我的数据库.因此,我使用以下脚本(和其他).我想手动为我手动创建的行提供主键.

问题

如果我执行脚本,它会说我需要启用IDENTITY_INSERT.我添加了这一行SET IDENTITY_INSERT UserGroups ON;尽可能多的例子,但是当我添加它时它仍然会给出相同的错误.

SET IDENTITY_INSERT UserGroups ON;  
GO 

INSERT INTO UserGroups VALUES (0, 0);
Run Code Online (Sandbox Code Playgroud)

运行脚本时出错:

只有在使用列列表且IDENTITY_INSERT为ON时,才能指定表'UserGroups'中标识列的显式值.

我是否还需要在数据库中更改某些内容,或者在脚本中是否还有其他内容可以手动添加主键?

细节

我使用SQL Server 2016 Management Studio.

我使用DDL Script for SQL脚本

我使用Entity Framework.

我在这张表中有两列

  1. 主键:Id
  2. int:GroupHeadId

c# database sql-server sql-scripts management-studio-express

3
推荐指数
2
解决办法
259
查看次数

如何使用实体框架核心为 postgress 数据库安装 TimescaleDB 扩展

我想在包含时间序列数据的特定表上使用TimescaleDB 。我的问题是如何从实体框架核心设置时间序列并使特定表成为超级表

数据库:Postgress 版本 11 框架:Ef Core 2.2 方法:Code First

postgresql timescaledb ef-core-2.2

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

为什么在同一范围内可能有多个具有静态生命周期的可变引用

为什么我可以在同一范围内对静态类型进行多次可变引用?

我的代码:

static mut CURSOR: Option<B> = None;

struct B {
    pub field: u16,
}

impl B {
    pub fn new(value: u16) -> B {
        B { field: value }
    }
}

struct A;

impl A {
    pub fn get_b(&mut self) -> &'static mut B {
        unsafe {
            match CURSOR {
                Some(ref mut cursor) => cursor,
                None => {
                    CURSOR= Some(B::new(10));
                    self.get_b()
                }
            }
        }
    }
}

fn main() {
    // first creation of A, get a mutable reference …
Run Code Online (Sandbox Code Playgroud)

static lifetime rust

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

设置Windows控制台的文本颜色无法正常工作

我正在尝试使用winapi和kernel32条板箱使用Rust更改Windows控制台的前景色。

[dependencies]
winapi = "0.2.8"
kernel32-sys = "0.2.1" 
Run Code Online (Sandbox Code Playgroud)

我存储前景色值的枚举:

#[repr(u16)]
pub enum ForegroundColor {
    RED =  (winapi::FOREGROUND_INTENSITY | winapi::FOREGROUND_RED) as u16,
    CYAN = (winapi::FOREGROUND_INTENSITY | winapi::FOREGROUND_GREEN | winapi::FOREGROUND_BLUE) as u16,
    // ...
}
Run Code Online (Sandbox Code Playgroud)

获取输出句柄的函数:

use winapi;
use winapi::{CONSOLE_SCREEN_BUFFER_INFO, COORD, HANDLE, SMALL_RECT, WORD};
use kernel32;

static mut CONSOLE_OUTPUT_HANDLE: Option<HANDLE> = None;
pub fn get_output_handle() -> HANDLE {
    unsafe {
        if let Some(handle) = CONSOLE_OUTPUT_HANDLE {
            handle_check(handle);
            handle
        } else {
            let handle = kernel32::GetStdHandle(winapi::STD_OUTPUT_HANDLE);
            handle_check(handle);
            CONSOLE_OUTPUT_HANDLE = Some(handle);
            handle
        } …
Run Code Online (Sandbox Code Playgroud)

console winapi colors kernel32 rust

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