首页 > 其他分享 >前端学习-Dart官方文档学习-003-模式匹配

前端学习-Dart官方文档学习-003-模式匹配

时间:2024-05-29 17:46:22浏览次数:19  
标签:case 学习 int Dart 003 print user key var

官方文档链接

简介

匹配和解构

// 匹配
const a = 'a';
const b = 'b';
switch (obj) {
  // List pattern [a, b] matches obj first if obj is a list with two fields,
  // then if its fields match the constant subpatterns 'a' and 'b'.
  case [a, b]:
    print('$a, $b');
}

// 解构
var numList = [1, 2, 3];
// List pattern [a, b, c] destructures the three elements from numList...
var [a, b, c] = numList;
// ...and assigns them to new variables.
print(a + b + c);

变量赋值

使用变量赋值模式交换两个变量的值,而不声明第三个临时变量:

var (a, b) = ('left', 'right');
(b, a) = (a, b); // Swap.
print('$a $b'); // Prints "right left".

Switch

switch (obj) {
  // Matches if 1 == obj.
  case 1:
    print('one');

  // Matches if the value of obj is between the
  // constant values of 'first' and 'last'.
  case >= first && <= last:
    print('in range');

  // Matches if obj is a record with two fields,
  // then assigns the fields to 'a' and 'b'.
  case (var a, var b):
    print('a = $a, b = $b');

  default:
}

// 逻辑或在switch比较常见
var isPrimary = switch (color) {
  Color.red || Color.yellow || Color.blue => true,
  _ => false
};

// Switch 中的条件
switch (pair) {
  case (int a, int b):
    if (a > b) print('First element greater');
  // If false, prints nothing and exits the switch.
  case (int a, int b) when a > b:
    // If false, prints nothing but proceeds to next case.
    print('First element greater');
  case (int a, int b):
    print('First element not greater');
}

For and for-in loops

Map<String, int> hist = {
  'a': 23,
  'b': 100,
};

for (var MapEntry(key: key, value: count) in hist.entries) {
  print('$key occurred $count times');
}
key: key 可简写为 :key
for (var MapEntry(:key, value: count) in hist.entries) {
  print('$key occurred $count times');
}

在 Dart 中,MapEntry是Map中的一个内部类,它表示Map中的一个键值对

Map<String, int> myMap = {
  'a': 1,
  'b': 2,
  'c': 3,
};

// 获取 Map 中的第一个键值对
MapEntry<String, int> firstEntry = myMap.entries.first;

// 访问键和值
String key = firstEntry.key;
int value = firstEntry.value;

// 修改值
firstEntry.value = 4;

// 打印修改后的 Map
print(myMap); 

Algebraic data types(没懂

sealed class Shape {}

class Square implements Shape {
  final double length;
  Square(this.length);
}

class Circle implements Shape {
  final double radius;
  Circle(this.radius);
}

double calculateArea(Shape shape) => switch (shape) {
      Square(length: var l) => l * l,
      Circle(radius: var r) => math.pi * r * r
    };

Validating incoming JSON

当知道JSON结构时

var json = {
  'user': ['Lily', 13]
};
var {'user': [name, age]} = json;

当JSON来自外部(如网络),需要先进行验证

// 普通写法
if (json is Map<String, Object?> &&
    json.length == 1 &&
    json.containsKey('user')) {
  var user = json['user'];
  if (user is List<Object> &&
      user.length == 2 &&
      user[0] is String &&
      user[1] is int) {
    var name = user[0] as String;
    var age = user[1] as int;
    print('User $name is $age years old.');
  }
}
// pattern写法
if (json case {'user': [String name, int age]}) {
  print('User $name is $age years old.');
}

Pattern types 模式匹配类型

标签:case,学习,int,Dart,003,print,user,key,var
From: https://www.cnblogs.com/ayubene/p/18220058

相关文章

  • 学习VUE3——模板引用ref
    在某些情况下,我们仍然需要直接访问底层DOM元素。要实现这一点,我们可以使用特殊的refattribute:<inputref="input">ref是一个特殊的attribute,和v-for章节中提到的key类似。它允许我们在一个特定的DOM元素或子组件实例被挂载后,获得对它的直接引用。这可能很有用,比......
  • 机器学习入门笔记_基本概念
    本文介绍机器学习中一些基本的概念和分类目录有监督学习回归分类无监督学习聚类降维强化学习机器学习适合的领域有监督学习是一种通过训练数据集来预测目标变量的方法,其中每个训练样本都有一个已知的标签或输出值。有监督学习的特点是“有x有y”。有监督学......
  • 基础会计学习指导习题与实训第五版王炜课后习题答案解析
    基础会计学习指导、习题与实训第五版)主 编: 王炜ISBN: 9787040564648出版社: 高等教育出版社上传者: Dzq!大家好,我是一名会计专业的大学生,最近在学习《基础会计学习指导、习题与实训第五版》这本教材。我发现这本书内容丰富,讲解透彻,非常适合初学者。但是,在学习过程中,我......
  • 一起学习大模型 - langchain里的 PromptTemplate详细介绍
    文章目录前言一、安装LangChain二、基本用法1.导入库并定义模板2.填充模板三、进阶用法1.使用多个变量2.嵌套模板3.动态变量四、应用模板与大模型交互五、疑问解答1.举例说明2.更详细的例子总结前言上一篇文章我们讲了Prompt的概念和作用(大模型的交......
  • 天池O2O优惠券使用预测相关学习
    学习网址:https://blog.csdn.net/zimiao552147572/article/details/105940961等1、Data.rename(columns={'col1':'rename_col1'},inplace=True),可以看到col1被重命名为rename_col1,inplace=True表示在原数据进行修改。2、(date()-date()).days()可以是负值吗?应该是可以的3、t、......
  • R 语言入门学习笔记:软件安装踩坑记录——删除所有包以及彻底解决库包被安装到 C 盘用
    目录R语言入门学习笔记:软件安装踩坑记录——删除所有包以及彻底解决库包被安装到C盘用户目录下的问题,以及一些其他需要注意的点软件版本及环境遇到的问题描述问题的分析和探究最终的解决方案折中方案根治方案其他在安装过程中需要注意的问题R语言入门学习笔记:软件安装踩坑记......
  • 机器学习策略篇:详解可避免偏差(Avoidable bias)
    可避免偏差如果希望学习算法能在训练集上表现良好,但有时实际上并不想做得太好。得知道人类水平的表现是怎样的,可以确切告诉算法在训练集上的表现到底应该有多好,或者有多不好,让我说明是什么意思吧。经常使用猫分类器来做例子,比如人类具有近乎完美的准确度,所以人类水平的错误是1%......
  • 校园新视界:可视化技术如何重塑我们的学习环境
    随着科技的飞速发展,我们的生活方式正在经历一场前所未有的变革。而在这场变革中,学校作为培养未来人才的重要基地,也在不断地探索与创新。 一、什么是校园可视化?校园可视化,就是通过先进的信息技术,将学校的各个角落、各种资源、各种数据以图形、图像、动画等形式直观地展示给师生......
  • 前端学习-Dart官方文档学习-002-类型
    官方文档链接基本类型Dart支持以下类型:Numbers(int,double)Strings(String)Booleans(bool)Records((value1,value2))Lists(List,alsoknownasarrays)Sets(Set)Maps(Map)Runes(Runes;oftenreplacedbythecharactersAPI)Symbols(Symbol)Thevaluenu......
  • 【机器学习】Chameleon多模态模型探究
    Chameleon:引领多模态模型的新时代一、多模态模型的时代背景二、Chameleon模型的介绍三、Chameleon模型的技术特点四、Chameleon模型的性能评估五、Chameleon模型的代码实例随着人工智能技术的深入发展,我们逐渐认识到单一模态的模型在处理复杂问题时存在一定的局限......