小编Her*_*tar的帖子

这是工厂吗?我如何为结构创建构造函数?

struct Person{
    name: String
}

fn person_factory(name: String)-> Person {
    Person{
        name,
    }
}

fn main() {
    let p1 = person_factory("Viktor Draganov".to_string());

    println!("{}", p1.name);
}
Run Code Online (Sandbox Code Playgroud)

这家工厂生锈了吗?如何从构造函数初始化 person?

rust

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

设置一个变量等于另一个变量

我有一些关于在JavaScript中将变量设置为与另一个变量相等的问题。

假设我们创建一个对象,a然后设置b = a

var a = {
  fname: "Jon",
  lname: "Smith",
  age: 50
}

var b = a;
Run Code Online (Sandbox Code Playgroud)

我了解,如果更改,a的属性之一b也会更改,因为设置时b = a我们不会克隆a数据,而是创建对a数据的引用。例如,如果我们设置a.fname = "Sarah"的新值b.fname"Sarah"

如果a通过设置尝试“清除” a = {},则对象b将保持不变。我不明白为什么以这种方式操作对象会产生与第一个示例不同的结果。


我对以下情况也有疑问。

var x = 10;
var z = x;
Run Code Online (Sandbox Code Playgroud)

如果然后设置x = 20,则值z保持不变。根据我第一个问题中描述的行为,人们会认为的新值z将反映的新值x。有人可以解释一下我在这里缺少什么吗?

谢谢!

javascript variables javascript-objects

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

将 Firestore 访问限制为经过身份验证的用户

在 Firestore 规则中使用哪些实际正确条件来限制仅对经过身份验证的用户进行访问?官方文档和这里的几个答案说你应该使用request.auth.uid != null. 我过去使用过它,它似乎有效,但最近当我在模拟器中测试其他一些规则时,我注意到当Null value error请求未经身份验证时,它会在该条件下抛出 a 。

如果是这种情况,那么这似乎request.auth != null是您应该使用的实际条件,因为它在模拟器中的表现似乎与预期一致。

这是否是模拟器与规则的实际行为之间的差异?如果模拟器正确,我假设该request.auth.uid != null条件仅“有效”,因为默认行为是在条件出现错误时拒绝访问。另一种选择是模拟器是错误的,并且在实际使用数据库时request.auth永远不会。null

是哪一个?

firebase firebase-security firebase-console google-cloud-firestore

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

在ListView.builder上交替背景颜色

我有一个列表ListView.builder生成ListTile的。我希望获得一种与典型列表一样的交替颜色。

有Flutter的官方方法吗?或者我坚持做类似的事情

ListView.builder(
...
  itemBuilder: (...) {
    return ListTile
      ..
      title: Container(
        decoration: BoxDecoration(color: Colors.grey),
          child: Column(children: <Widget>[
            Text("What should've been the title property"),
            Text("and its trailing"),
          ],),
      ),
Run Code Online (Sandbox Code Playgroud)

或类似的东西?

widget dart flutter

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

标签的格式文本

我在一个由整数属性控制的视图中有一个标签,当值为负时它显示一个减号,当值为正时它不显示。但是,我希望标签显示“+5”、“-3”...

以下面的代码为例

import javafx.beans.property.SimpleIntegerProperty
import tornadofx.*

class MyView : View() {

   val negProp = SimpleIntegerProperty(-3) // this prop is in a ItemViewModel
   val posProp = SimpleIntegerProperty(+4) // this prop is in a ItemViewModel

    override val root = hbox {
        label(negProp)      // shows - 3
        label(posProp)      // shows 4
    }
}
Run Code Online (Sandbox Code Playgroud)

一旦属性发生变化,有没有办法格式化文本?谢谢你。

javafx kotlin tornadofx

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

为什么字符串连接只消耗第一个字符串?

当我遇到这个时,我正在阅读锈书

fn main() {
    let s1 = String::from("Hello, ");
    let s2 = String::from("world!");
    let s3 = s1 + &s2; // note s1 has been moved here and can no longer be used
}
Run Code Online (Sandbox Code Playgroud)

事实证明,'+操作员使用的add方法,其签名看起来像这样':

fn add(self, s: &str) -> String { // ... }
Run Code Online (Sandbox Code Playgroud)

我明白为什么s1被“消耗”并且以后不再可用的原因。但是为什么 rust 会这样呢?我的意思是,为什么方法不能add将 self ( &self) 作为第一个参数的引用,以便该s1字符串可供以后使用?

rust

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

派生属性和自己实现结构的特征有什么区别?

我想知道,假设我的实现是有效的,例如#[derive(Debug)]属性和我自己实现std::fmt::Debug某些结构的特征(或可以用derive属性添加的任何其他特征)之间有什么区别?编译时间会有差异吗?性能差异?

什么时候应该使用derive属性,什么时候应该自己实现特征?

rust

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

为什么标识符不能以数字开头?

我有一个名为 的文件1_add.rs,我尝试将其添加到lib.rs. 然而,我在编译过程中遇到了以下错误。

error: expected identifier, found `1_add`
 --> src/lib.rs:1:5
  |
1 | mod 1_add;
  |     ^^^^^ expected identifier
Run Code Online (Sandbox Code Playgroud)

看来以数字开头的标识符无效。但为什么 Rust 会有这个限制呢?如果我想指示不同 rust 文件的顺序(用于管理练习文件),是否有任何解决方法?

rust

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

从数组中采样 N 个元素的函数

假设我们有一个数组:

let arr: [u8; 10] = [1,2,3,4,5,6,7,8,9,10];
Run Code Online (Sandbox Code Playgroud)

Rust 中是否有一个函数可以N从中选择随机元素而不重复?相当于python的random.sample功能。

random std rust

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

不同的返回值取决于通用常量的值

让我们考虑这样一个函数:

fn test<const N: usize>() -> [f64; N] {
    if N == 1 {
        [0.0_f64; 1]
    } else if N == 2 {
        [1.0_f64; 2]
    } else {
        panic!()
    }
}
Run Code Online (Sandbox Code Playgroud)

N我的理解是编译器会在编译时评估 的值。如果是这种情况,该if语句也可以在编译时求值,因此应该返回正确的类型,因为[0.0_f64; 1]仅返回 ifN == 1[1.0_f64; 2]仅返回 if N == 2

现在,当我尝试编译此代码时,编译器失败,基本上告诉我返回数组的尺寸是错误的,因为它们没有明确地具有N长度。

我确实意识到,我可以将这个具体示例实现为

fn test<const N: usize>() -> [f64; N] {
    match N {
        1 => { [0.0_f64; N] },
        2 => { [1.0_f64; N] },
        _ …
Run Code Online (Sandbox Code Playgroud)

generics rust

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