首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Rust - 03 - Structs and Methods

Rust - 03 - Structs and Methods

作者头像
szhshp
发布于 2023-01-05 07:57:05
发布于 2023-01-05 07:57:05
32900
代码可运行
举报
运行总次数:0
代码可运行

Rust doesn’t allow us to mark only certain fields as mutable. You can only mark whole struct as mutable or immutable.

For struct field you can use spread operator. But remember that data will be moved to new struct.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fn main() {
  // --snip--

  let user1 = User {
      email: String::from("someone@example.com"),
      username: String::from("someusername123"),
      active: true,
      sign_in_count: 1,
  };

  let user2 = User {
      email: String::from("another@example.com"),
      ..user1
  };

  print!("{}", user1.email); // Works
  print!("{}", user1.username); // Do not work, moved to user2 already
}

Tuple Structs

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct Color(i32, i32, i32);
struct Point(i32, i32, i32);

fn main() {
    let black = Color(0, 0, 0);
    let origin = Point(0, 0, 0);
}

Unit Structs

Structs with no fields

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct AlwaysEqual;

fn main() {
    let subject = AlwaysEqual;
}

Struct as Function Parameter

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct Rectangle {
    width: u32,
    height: u32,
}

fn main() {
    let rect1 = Rectangle {
        width: 30,
        height: 50,
    };

    println!(
        "The area of the rectangle is {} square pixels.",
        area(&rect1)
    );
}

fn area(rectangle: &Rectangle) -> u32 {
    rectangle.width * rectangle.height
}

Print Debug Info for Struct

prints to stdout

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#[derive(Debug)]   // Required for print of struct

fn main() {
    let rect1 = Rectangle {
        width: 30,
        height: 50,
    };

    println!("rect1 is {:?}", rect1);
     dbg!(&rect1);
}

prints to stderr

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    let rect1 = Rectangle {
        width: dbg!(30 * scale),
        height: 50,
    };
    dbg!(&rect1);  // use ref here to prevent ownership changes

Method

  • Use impl to add method for a struct
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#[derive(Debug)]
struct Rectangle {
    width: u32,
    height: u32,
}

impl Rectangle {
    // define method for Rectangle
    // the `&self` is shorthand for `self: &Self` 
    // the type Self is an alias for the type that the impl block is for.
    fn area(&self) -> u32 {  
        self.width * self.height
    }
}

fn main() {
    let rect1 = Rectangle {
        width: 30,
        height: 50,
    };

    println!(
        "The area of the rectangle is {} square pixels.",
        rect1.area()
    );
}

Calling method with Automatic Referencing and Dereferencing

In C and C++, two different operators are used for calling methods: you use . if you’re calling a method on the object directly and -> if you’re calling the method on a pointer to the object and need to dereference the pointer first. In other words, if object is a pointer, object->something() is similar to (*object).something().

Rust automatically adds in &, &mut, or * so object matches the signature of the method. In other words, the following are the same:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
p1.distance(&p2);
(&p1).distance(&p2);

Constructor in methods

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
impl Rectangle {
    fn square(size: u32) -> Self {
        Self {
            width: size,
            height: size,
        }
    }
}


Rectangle::square(3);

Multiple impl

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
impl Rectangle {
    fn area(&self) -> u32 {
        self.width * self.height
    }
}

impl Rectangle {
    fn can_hold(&self, other: &Rectangle) -> bool {
        self.width > other.width && self.height > other.height
    }
}


// Caution: for method without ref on self, use `Rectangle::test()` instead 
impl Rectangle {
    fn test() {
        print!("Test")
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-12-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Get "http://127.0.0.1:10252/healthz": dial tcp 127.0.0.1:10252: connect: connection refused
解决思路: 注释掉/etc/kubernetes/manifests下的kube-controller-manager.yaml和kube-scheduler.yaml的- – port=0 确认kube-scheduler和kube-controller-manager组件配置是否禁用了非安全端口
院长技术
2020/11/19
3.8K0
Kubernetes(k8s)-安装k8s(containerd版)
我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。
运维小路
2024/12/23
8310
Kubernetes(k8s)-安装k8s(containerd版)
使用kube-prometheus部署k8s监控(最新版)
Prometheus Operator的本职就是一组用户自定义的CRD资源以及Controller的实现,Prometheus Operator负责监听这些自定义资源的变化,并且根据这些资源的定义自动化的完成如Prometheus Server自身以及配置的自动化管理工作。以下是Prometheus Operator的架构图
仙人技术
2021/02/25
15.2K5
使用kube-prometheus部署k8s监控(最新版)
K8S学习笔记之kubectl get cs显示unhealthy的解决办法
这两个pod的非安全端口没有开启,健康检查时报错,但是由于本身服务是正常的,只是健康检查的端口没启,所以不影响正常使用。
Jetpropelledsnake21
2022/09/27
1.1K0
二进制部署k8s教程09 - 部署scheduler
kube-scheduler 作为 kube-apiserver 的调度器,需要访问 kube-apiserver 的服务,所以需要 kube-apiserver 的 ca
janrs.com
2023/03/08
3780
二进制安装k8s集群(11)-安装kube-scheduler
在上一篇文章里我们主要介绍master组件kube-controller-manager的安装,这里我们主要介绍安装另外一个master组件kube-scheduler,这里我们采用下载二进制binary制作linux systemd的方式安装。这个组件也在下载的kubenetes包里(1.15.1版本),在以前文章里已经下载过(要科学上网或者搭个梯子),这里就不再重复。另外kube-scheduler与kube-apiserver交互我们开启ssl,所以请提前制作好相关ssl证书(可以参考以前文章里制作docker的证书),并copy到配置目录里。
TA码字
2020/04/01
9610
二进制安装k8s集群(11)-安装kube-scheduler
011.Kubernetes二进制部署kube-scheduler
本实验部署一个三实例 kube-scheduler 的集群,启动后将通过竞争选举机制产生一个 leader 节点,其它节点为阻塞状态。当 leader 节点不可用时,阻塞的节点将再次进行选举产生新的 leader 节点,从而保证服务的可用性。
木二
2019/11/18
5220
011.Kubernetes二进制部署kube-scheduler
kubeadm搭建单master节点1.20版本kubernetes集群
由于是云服务器,selinux、firewalld、swap都会默认关闭,iptables规则也会清空,所以仅需要配置下主机名、hosts文件以及配置下kubernetes的转发规则就好,如下:
唐旭
2021/11/02
1.6K1
安装K8s后查看CS有错误
故障现象 查看状态存在不健康组件 [root@k8s-master ~]#kubectl get cs Warning: v1 ComponentStatus is deprecated in v1.19+ NAME STATUS MESSAGE ERROR scheduler
院长技术
2022/03/11
1K0
controller-manager学习三部曲之一:通过脚本文件寻找程序入口
程序员欣宸
2023/10/03
4390
controller-manager学习三部曲之一:通过脚本文件寻找程序入口
Kubernetes高可用集群二进制部署(四)部署kubectl和kube-controller-manager、kube-scheduler
kube.config`` 为kubectl的配置文件,包含访问 `apiserver 的所有信息,如 apiserver 地址、CA 证书和自身使用的证书
鱼找水需要时间
2023/08/03
3770
Kubernetes高可用集群二进制部署(四)部署kubectl和kube-controller-manager、kube-scheduler
二进制部署k8s教程08 - 部署controller-manager
kube-controller-mangae 作为 kube-apiserver 的控制器,需要访问 kube-apiserver 的服务,所以需要 kube-apiserver
janrs.com
2023/03/08
5620
国内 CentOS 7 安装 K8S v1.29.2(CRI:containerd),通过安装 K8S,了解 K8S 的核心概念
通过安装 K8S,了解 K8S 的核心概念:控制面、CRI、CNI、Deployment、Service、sandbox 等,本文不仅包含安装流程,而且包含丰富的 Troubeshooting 实战,以及解释这背后发生了什么。
SRE扫地僧
2024/04/27
4.1K0
国内 CentOS 7 安装 K8S v1.29.2(CRI:containerd),通过安装 K8S,了解 K8S 的核心概念
Kubernetes 集群监控 controller-manager & scheduler 组件
在上篇 Kubernetes 集群监控 kube-prometheus 部署 我们实现 kube-prometheus 的安装,我们可以看到监控指标大部分的配置都是正常的,只有两个没有管理到对应的监控目标,比如 kube-controller-manager 和 kube-scheduler 这两个系统组件。
高楼Zee
2020/12/15
2.9K0
kubeadm系列-03-静态Pod的创建
上节提到执行 kubeadm init 之后,会在机器上启动 kubelet,实际上在 controlplane 节点上还会启动像 kube-apiserver, kube-controller-manager, kube-scheduler 甚至还有 etcd,那么这些进程又是怎么被启动的呢,下文会做简单的分析
runzhliu
2022/07/06
6670
kubeadm安装k8s 组件controller-manager 和scheduler状态 Unhealthy
通过kubeadm安装好kubernetes v1.20.2 查看集群状态,发现组件controller-manager 和scheduler状态 Unhealthy
全栈程序员站长
2021/06/10
7710
kubeadm安装k8s 组件controller-manager 和scheduler状态 Unhealthy
IT苦工指南 | Kubernetes v1.8.x全手动安装
觉得Rainbond提供的既简洁、又易用、而且生产就绪的Kubernets体验不过瘾……
Rainbond开源
2018/05/28
1.2K3
Kubernetes v1.22.1部署报错2: Get “http://localhost:10248/healthz“
 在/etc/docker/daemon.json文件中加入“"exec-opts": ["native.cgroupdriver=systemd"]一行配置,重启docker跟清除一下kubeadm信息即可重新初始化。”
非著名运维
2022/06/22
1.7K0
CentOS7.7部署k8s(3 master + 3 node + 1 client)
VMware创建7个vm,规格2cpu 2G mem 200G disk,一个NAT网卡
后端云
2020/04/22
2.3K0
CentOS7.7部署k8s(3 master + 3 node + 1 client)
Kubernetes(k8s)-master组件介绍
我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。
运维小路
2024/12/25
3110
Kubernetes(k8s)-master组件介绍
推荐阅读
相关推荐
Get "http://127.0.0.1:10252/healthz": dial tcp 127.0.0.1:10252: connect: connection refused
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验