问题列表 - 第317983页

对已经可变引用的对象保持读写控制的最佳“Rust”方法是什么?

假设我想测试一个 struct ( ) 的行为,Consumer该 struct ( ) 采用对另一个 struct ( ) 的可变引用Target。测试其正确性的唯一方法是直接读写访问Target. 我们保证这里没有多线程。

我想到了类似下面的内容,尽管由于明显违反借用规则而无法编译:t仍然可变借用,而我们稍后想再次借用它。

use std::io::Write;

struct Consumer<'a, W: Write> {
    out: &'a mut W
}

impl<'a, W: Write> Consumer<'a, W> {
    pub fn consume(&mut self, data: &[u8]) {
        // do something else
        self.out.write(data).unwrap();
    }
}

struct Target {
    buf: Vec<u8>
}

impl Target {
    pub fn drain(&mut self) {
        self.buf.clear();
    }
}

impl Write for Target {
    fn write(&mut self, …
Run Code Online (Sandbox Code Playgroud)

rust borrow-checker

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

隐式编译器创建的默认构造函数是否可以有多个 null 主体?

隐式编译器创建的默认构造函数是否可以有多个 null 主体?根据IBM的网站,答案是:不。

我有这个项目有点难倒我:

这是声明一个名为 StackWalkerToConsole 的类的实例,没有定义默认构造函数的地方:

void func5()
{
  StackWalkerToConsole sw;
  ...
}
Run Code Online (Sandbox Code Playgroud)

这会以某种方式导致其父类的用户定义构造函数之一被调用:

StackWalker::StackWalker(int options, LPCSTR szSymPath, DWORD dwProcessId, HANDLE hProcess)
{
  // The function has a body, I just removed it for clarity's sake.
  ...
}
Run Code Online (Sandbox Code Playgroud)

因此,我在这个构造函数上放置了一个断点,并使用调用堆栈查看了 StackWalkerToConsole 的默认构造函数。由于源码中没有定义,所以只能看它的反汇编:

StackWalker_VC2017.exe!StackWalkerToConsole::StackWalkerToConsole(void):
0000000140008210  mov         qword ptr [rsp+8],rcx  
0000000140008215  push        rdi  
0000000140008216  sub         rsp,40h  
000000014000821A  call        qword ptr [__imp_GetCurrentProcess (014012E060h)]  
0000000140008220  mov         qword ptr [rsp+30h],rax  
0000000140008225  call        qword ptr [__imp_GetCurrentProcessId (014012E068h)]  
000000014000822B  mov         rcx,qword ptr [rsp+30h]  
0000000140008230 …
Run Code Online (Sandbox Code Playgroud)

c++ x86 winapi constructor default-constructor

-1
推荐指数
1
解决办法
159
查看次数

Typescript:将窗口上的属性更改为可选?

默认的 TS 类型window.Notification是Notification,但由于 Web 通知 API 只有 90% 的浏览器支持,因此应该是Notification | undefined。我最近遇到一个错误,我在使用时window.Notification没有检查它是否已定义。

有没有办法覆盖 的属性window,例如使它们可选?我尝试了这个,但没有成功:

declare global {
  interface Window {
    Notification?: Notification;
  }
}
Run Code Online (Sandbox Code Playgroud)

javascript typescript

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

Android Studio (Hedgehog) 上的 Google Assistant 插件选项

我意识到这不完全是一个编程问题,但我在任何地方都找不到答案。我在使用 Android Studio 和插件时遇到问题。

我一直在尝试在我的应用程序中实现具有自定义意图的快捷方式,但测试它们非常困难。我所能管理的就是通过 Playstore 上的内部测试轨道上传和测试。

谷歌文档讨论的应用程序操作测试工具插件已被贬值,并且需要一个插件 com.google.gtc.login,但在 Marketplace 中找不到该插件。我认为 Android Studio (Hedgehog) 不支持缺少的插件。

Google Assistant 插件是应用程序操作测试工具插件的替代品。它在 Marketplace 中找不到,必须直接从 JetBrains ( https://plugins.jetbrains.com/plugin/16739-google-assistant ) 下载。不过,最高版本仅支持Android Studio(Giraffe)。

Android Studio (Hedgehog) 中是否有用于测试应用操作的选项?我是否需要降级到较低版本才能测试应用程序操作?我是否一直在上传内部测试版本并等待更新?

plugins android android-studio app-actions google-assistant

5
推荐指数
1
解决办法
137
查看次数

printf中'\n'和'\r'之间有什么关系?

#include<stdio.h>
int main()
{
printf ("Hello\r");
}
Run Code Online (Sandbox Code Playgroud)

在 gcc 编译器中,执行此代码时不会打印任何内容。如果我添加\n到 printf 语句中,例如

printf ("Hello\r\n");
Run Code Online (Sandbox Code Playgroud)

它打印Hello。为什么它会这样?输出缓冲区发生了什么?

c printf

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

我的示例中的继承层次结构有什么问题?

这是代码:

#include <iostream>

struct Parent
{
    virtual ~Parent() = default;
};

class Buddy
{
public:
    virtual ~Buddy() = default;
    Buddy(Parent& p) : parent_ { p } {}
    bool IsHovered() const { return is_hovered_; }

private:
    bool    is_hovered_ = false;
    Parent& parent_;
};

class Child : public Parent, public Buddy
{
public:
    Child() : Buddy { *this } {}

    bool BuddyIsHovered() const { return IsHovered(); }
};

int main()
{
    Child c;
    // Expected 'false', but 'true' is always printed.
    std::cout …
Run Code Online (Sandbox Code Playgroud)

c++

17
推荐指数
1
解决办法
784
查看次数

凭据管理器 - 如何创建“SignInWithGoogle”凭据?

我正在尝试设置 Google 的 One-Tap,但使用新的一体化凭据管理器。

然而,在浏览了(写得很糟糕的)文档之后,我停了下来。在“使用 Google 登录”后,一切都很好,直到我收到“NoCredentialException:没有可用的凭据”,这是有道理的。

但是……我如何创建凭证?

Google 提供了为密码和密钥创建凭据的示例,但我找不到有关为“使用 Google 登录”按钮(互联网上的任何位置)创建凭据的任何信息。

“凭据管理器通过最新的 Google ID 帮助程序库支持“使用 Google 登录”按钮”

(正如 Android 所说)

所以,我使用<CredentialManager>.createCredentialAsync()它是因为谷歌在他们提供的示例中使用了它(并明确告诉在这里这样做)。

但是,Android 的 createCredentialAsync 需要 a CreateCredentialRequest,并且它只接受三种类型:“CreatePasswordRequest”、“CreatePublicKeyCredentialRequest”和“CreateCustomCredentialRequest”。

这就是上面引用中提到的“Google 的ID 帮助器库”应该派上用场的地方。该库具有类 GetGoogleIdOption 和 GetSignInWithGoogleOption ,它们都是GetCustomCredentialOption的子类。

现在的问题是我应该如何CreateCustomCredentialRequest为我的方法获取一个类(或其子类)<CredentialManager>.createCredentialAsync()。

Google 的“最新 ID 帮助器库”不提供:

  1. CustomCredential 的子类,它是 SignInWithGoogle 的构建器(它适用于 GoogleIdToken)
  2. 一个非常长的CreateSignInWithGoogleRequest类(或一个CreateGoogleIdRequest类),它是该类的子类CreateCustomCredentialRequest。

因此,由于我被困在应该如何得到这个问题上CreateCustomCredentialRequest,我也不确定应该如何“将凭证管理器与通过 Google 登录集成”。 …

android google-oauth google-signin google-one-tap android-credential-manager

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

Coldfusion 中的 Evaluate() 函数不起作用

我在 Coldfusion 2021 中使用评估()时遇到错误。请查看屏幕截图在此输入图像描述

我可以知道背后的原因是什么吗?或者有什么解决方案可以解决这个问题吗?在我的项目中,我在很多地方都使用了这个功能。请帮我解决这个问题。

coldfusion cfc application.cfc cfml

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

列表似乎被重用,但裸值工作正常

这:

my %dict;
my $counter = 0;
for ^5 -> $digit {
        %dict{$digit} = ($counter,);
        $counter += 1;
}
say %dict;
Run Code Online (Sandbox Code Playgroud)

给了我这个: {0 => (5), 1 => (5), 2 => (5), 3 => (5), 4 => (5)},但我期望这个: {0 => (0), 1 => (1), 2 => (2), 3 => (3), 4 => (4)} 分配一个裸值,一个数组或散列按我的预期工作。

raku

5
推荐指数
1
解决办法
107
查看次数

在此示例中,为什么我不能一次多次以可变方式借用?

游戏的最小示例,玩家拥有一个位置并随着时间的流逝而走动。编译如下:

use std::thread::sleep;
use std::time::Duration;

struct Player {
    position: usize,
}

impl Player {
    fn new() -> Self {
        Self { position: 0 }
    }
}

impl Player {
    fn get_position(&self) -> usize {
        self.position
    }
}

impl Player {
    fn walk(&mut self) {
        self.position += 1;
    }
}

fn main() {
    let mut player = Player::new();
    loop {
        player.walk();
        sleep(Duration::from_secs(1));
    }
}
Run Code Online (Sandbox Code Playgroud)

如果玩家借用该位置而不是拥有它,则不会编译:

use std::thread::sleep;
use std::time::Duration;

struct Player<'a> {
    position: &'a mut usize,
}

impl<'a> Player<'a> {
    fn …
Run Code Online (Sandbox Code Playgroud)

mutability rust borrow-checker

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