首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在c#中实现任何状态机的通用有限状态机。并检查用户输入的任何下一状态

在C#中实现任何状态机的通用有限状态机,可以通过以下步骤进行:

  1. 定义状态机的状态:
    • 确定状态的数量和名称,例如"State1"、"State2"等。
    • 根据需要,为每个状态定义状态属性,例如状态的进入动作、退出动作等。
  • 定义状态机的转换规则:
    • 确定状态之间的转换规则,即从一个状态转换到另一个状态的条件。
    • 根据需要,为每个转换规则定义转换动作,例如在状态转换时执行的特定操作。
  • 实现状态机的逻辑:
    • 在C#中,可以使用类来表示状态机。创建一个类来表示状态机,并在其中定义状态和转换规则。
    • 在状态机类中,可以使用枚举来表示不同的状态,并使用条件语句(如if-else或switch)来实现状态之间的转换逻辑。
    • 在状态机类中,可以定义方法来执行状态的进入动作、退出动作和转换动作。
  • 检查用户输入的下一状态:
    • 在状态机类中,可以定义一个方法来接收用户输入,并根据输入判断下一个状态。
    • 使用条件语句(如if-else或switch)来根据用户输入确定下一个状态,并执行相应的转换动作。

下面是一个示例代码,演示如何在C#中实现一个简单的有限状态机:

代码语言:txt
复制
using System;

// 定义状态枚举
enum State
{
    State1,
    State2,
    State3
}

// 定义状态机类
class StateMachine
{
    private State currentState;

    public StateMachine()
    {
        currentState = State.State1; // 设置初始状态
    }

    // 状态转换方法
    public void Transition(State nextState)
    {
        // 执行状态转换动作
        Console.WriteLine($"Transition from {currentState} to {nextState}");

        // 更新当前状态
        currentState = nextState;
    }

    // 用户输入检查方法
    public void CheckUserInput(string userInput)
    {
        // 根据用户输入判断下一个状态
        switch (currentState)
        {
            case State.State1:
                if (userInput == "A")
                {
                    Transition(State.State2);
                }
                else if (userInput == "B")
                {
                    Transition(State.State3);
                }
                else
                {
                    Console.WriteLine("Invalid input");
                }
                break;
            case State.State2:
                if (userInput == "C")
                {
                    Transition(State.State1);
                }
                else
                {
                    Console.WriteLine("Invalid input");
                }
                break;
            case State.State3:
                if (userInput == "D")
                {
                    Transition(State.State1);
                }
                else
                {
                    Console.WriteLine("Invalid input");
                }
                break;
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        StateMachine stateMachine = new StateMachine();

        // 模拟用户输入
        stateMachine.CheckUserInput("A");
        stateMachine.CheckUserInput("C");
        stateMachine.CheckUserInput("D");
        stateMachine.CheckUserInput("B");

        Console.ReadLine();
    }
}

上述示例代码实现了一个具有3个状态(State1、State2和State3)的有限状态机。根据用户的输入,状态机会根据当前状态执行相应的转换动作,并更新当前状态。在示例中,用户输入"A"会将状态从State1转换到State2,输入"C"会将状态从State2转换回State1,依此类推。

请注意,上述示例代码仅为演示目的,并未涉及具体的应用场景和推荐的腾讯云产品。在实际应用中,根据具体需求和场景,可以进一步扩展和优化状态机的实现,并结合相关的云计算技术和产品进行开发和部署。

相关搜索:检查输入是否在列表中的任何位置如何检查用户是否没有在Google Sheets的提示框中输入任何值如果用户没有在AngularJS的输入字段中输入任何数据,如何禁用按钮?在具有用户输入和循环的程序中没有输出任何内容pyinstaller exe等待用户在命令提示符下输入任何键,然后继续下一次迭代。如何在不输入任何密钥的情况下保持它的运行在文本框中,如果用户在除first position之外的任何位置输入减号,则应跳回到前面如何允许用户输入"+“或"-”这样的符号,并允许在C#中的计算中使用该符号禁用HTML5、Javascript或Jquery中的按钮,这样任何黑客都无法通过检查按钮并更改其值来更改状态我使用的是NetBean图形用户界面,在我从数组中添加或删除一项并输出它之后,它将不再接受任何输入尝试在c#中实现,用户输入他们的年龄,它会告诉他们出生在哪一年尝试在不使用函数的情况下检查输入中是否有任何大写、小写、非字母字母,但代码不起作用尝试让PHP在字典词表中查找用户密码?代码可以找到像Banana123这样的通用密码,但BananaC123不会返回任何内容当我获取响应api时,有没有办法在react中验证用户类型(用户和供应商)而不使用任何令牌并使用不同的页面?我怎样才能让用户在我的函数执行过程中的任何时候都可以输入"reset“,它会把他们带回函数的开头呢?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

超轻量级有限状态机Mini-FSM

在任何给定的时间点,有限状态机都处于某一特定状态,并且可以根据当前状态和输入条件,从当前状态转移到另一个状态。...查找表:基于二维数组或者哈希表维护状态转移表,其中一维表示当前状态,另一维表示输入条件(时间),表格中的元素则表示下一个状态。...:一个基于Java的轻量级状态机库 Stateless:NET中基于C#实现的轻量级状态库,支持各种类型作为状态和触发事件、支持状态继承、支持状态进入/离开事件、支持条件状态转移、支持状态/转移查询,对应的...在系统内部内嵌了简单的有限状态机管理,并根据业务需求扩展了Action执行后的返回结果ActionResult。其中Action的执行使用响应式编程,基于Flux 和 Mono 实现。...数据 实现架构 Mini-FSM框架实现如下所示:用户基于Event事件触发当前状态转移并返回转移结果。

85164

【学习】数学之美系列十:有限状态机和地址识别

每 一个有限状态机都有一个启始状态和一个终止状态和若干中间状态。每一条弧上带有从一个状态进入下一个状态的条件。...上 述基于有限状态机的地址识别方法在实用中会有一些问题:当用户输入的地址不太标准或者有错别字时,有限状态机会束手无策,因为它只能进行严格匹配。...(其 实,有限状态机在计算机科学中早期的成功应用是在程序语言编译器的设计中。一个能运行的程序在语法上必须是没有错的,所以不需要模糊匹配。而自然语言则很 随意,无法用简单的语法描述。)...为了解决这个问题,我们希望有一个能进行模糊匹配、并给出一个字串为正确地址的可能性。为了实现这一目的,科学家们提出了基于概率的有限状态机。...九十年代以后,随着有限状态机在自然语言处理的广 泛应用,不少科学家致力于编写通用的有限状态机程序库。

830110
  • 前端工程师的编译原理指南-「有限状态机」

    有限状态机 概念 有限状态机的概念其实和 JavaScript 关系并不是很大,但是 JavaScript 中绝大多数状态都可以使用有限状态机来描述。...针对上述行为,我们试试用状态机来描述这个过程。 我们可以将用户的鼠标行为 Event 抽象成为状态机的输入,将按钮看成状态机。...比如粗暴的直接使用正则进行分词等等方式,但使用状态机进行分词是最优雅且强大的方式。 同样在之后我们去实现这个过程,这一步在了解了状态机的概念之后。...这是因为在 tokenizer 函数中 forEach 结束后我们对于最后一次分词结果没有进行任何处理。 我们需要在遍历停止后,需要将最后一次的分词结果同样输入到 tokens 中。...所谓有限状态机不过是一种模型、一种概念。我们可以在任何场景下将它尝试理解成为有限状态机模型来进行处理。 下一篇文章我们会正式进入主题,带领大家去打造一款小型JavaScript编译器。

    57510

    如何用有限状态机识别地址的有效性?

    所幸的是,地址的上下文比较简单,是有限的,虽然我们可以暴力穷举所有省、市、区、街道。但有效的方法还是有限状态机。...每一个有限状态机都有一个开始状态和一个终止状态,以及若干中间状态,每一条弧上带着一个状态进入下一个状态的条件,比如在上图中当前的状态如果是省,如果遇到下一个词组和区有关就进入区,如果遇到下一个词组和城市有关那么就进入市...上述代码的 transfer 就是一个 hash 表,相当于把所有正确转移的情况都穷举了一遍,它穷尽了在任何一种情况下,对应任何的输入,需要转义的状态。...最后的话 本文分享了如何实现一个简单的有限状态机,代码比较通用,前文这个编程题,让人欲罢不能也是套用这个代码实现的,如果对你有所帮助,还请点赞、关注支持,赠人在看,手留余香。...附有限状态机的开源实现: django-fsm[1] python-state-machine[2] 关注我,每天学习一个 Python 小技术。

    55320

    AI 助力游戏开发实践-有限状态机

    以下是 FSM 在游戏开发中的一些主要作用:行为控制: FSM 允许开发者定义游戏角色在不同情况下的行为,如站立、行走、奔跑、攻击等,并通过事件(如玩家输入、敌人接近)来触发这些行为之间的转换。...实际案例:游戏物体的状态切换为了更直观地展示有限状态机在游戏开发中的应用,我们将通过一个具体的代码示例来描述其在游戏物体状态切换中的开发过程,下面是一个简单的物体移动与状态转换的示例。...Moving(移动):角色根据玩家的输入进行水平移动。状态之间的转换条件如下:当玩家没有进行任何水平方向的输入时,角色从 Moving 状态转换到 Idle 状态。...希望这个示例能够帮助大家更好地理解和掌握有限状态机的设计与实现,从而在游戏开发中更加高效地管理游戏物体的行为状态。...写完状态逻辑之中,我们可以在敌人类中,实例化状态,并完成状态转换的业务逻辑通过代码对话和代码补全功能,我们可以逐步完成通过状态机实现 NPC 的巡逻机制,下面是最终展示效果:总结通过本次实践,我们深刻认识到有限状态机

    7610

    AI 助力游戏开发实践-有限状态机

    每次修改都可能影响到其他部分的逻辑,导致 bug 的产生。这就是为什么在游戏开发中,使用有限状态机是一个更好的选择。 FSM在游戏开发中的作用 在游戏开发中,FSM 扮演着至关重要的角色。...以下是FSM在游戏开发中的一些主要作用: 行为控制:FSM 允许开发者定义游戏角色在不同情况下的行为,如站立、行走、奔跑、攻击等,并通过事件(如玩家输入、敌人接近)来触发这些行为之间的转换。...Moving(移动):角色根据玩家的输入进行水平移动。 状态之间的转换条件如下: 当玩家没有进行任何水平方向的输入时,角色从 Moving 状态转换到 Idle 状态。...希望这个示例能够帮助大家更好地理解和掌握有限状态机的设计与实现,从而在游戏开发中更加高效地管理游戏物体的行为状态。...通过代码对话和代码补全功能,我们可以逐步完成通过状态机实现 NPC 的巡逻机制,下面是最终展示效果: 04、总结 通过本次实践,我们深刻认识到有限状态机(FSM)在游戏开发中管理复杂逻辑和行为状态方面的强大能力

    22520

    一个基于Java的开源URL嗅探器

    我们的目标是:检测出尽可能多的恶意链接,但是我们不希望紧紧局限于检测在 RFC 1738 中定义的URL地址,而是希望可以检测出任何能够在真正的浏览器地址栏中输入并且可以访问到的URL地址。...为了取代使用正则表达式,我们手工打造了一个有限状态机来解析出在文本中的URL。 有限状态机(你可以在这里了解更多信息)是由一组状态组成,状态之间可以由输入事件来触发状态转换。...在这种请求下,输入事件就是我们在文本中正在解析的字符。 ? 这个有限状态机有几个状态,主要是基于 URL 的各部分拆分的。状态由一系列的布尔变量保持,每一次一次消耗一个字符,同时进行一次状态转移。...为了性能考虑,这个有限状态机器被设计成这样的逻辑拓扑顺序,没有箭头会从后面的状态指向前面的状态。...如果状态机在任何一个位置撞到一个非预期的字符,它将返回上一次最新的结束状态,同时重新开始这个算法。 这个最棘手的部分是匹配字符。这些字符实际上,有可能在多个状态中存在。

    1.7K20

    AI 助力游戏开发实践-有限状态机

    每次修改都可能影响到其他部分的逻辑,导致 bug 的产生。这就是为什么在游戏开发中,使用有限状态机是一个更好的选择。 FSM 在游戏开发中的作用 在游戏开发中, FSM 扮演着至关重要的角色。...以下是 FSM 在游戏开发中的一些主要作用: 行为控制: FSM 允许开发者定义游戏角色在不同情况下的行为,如站立、行走、奔跑、攻击等,并通过事件(如玩家输入、敌人接近)来触发这些行为之间的转换。...Moving(移动):角色根据玩家的输入进行水平移动。 状态之间的转换条件如下: 当玩家没有进行任何水平方向的输入时,角色从 Moving 状态转换到 Idle 状态。...希望这个示例能够帮助大家更好地理解和掌握有限状态机的设计与实现,从而在游戏开发中更加高效地管理游戏物体的行为状态。...写完状态逻辑之中,我们可以在敌人类中,实例化状态,并完成状态转换的业务逻辑 通过代码对话和代码补全功能,我们可以逐步完成通过状态机实现 NPC 的巡逻机制,下面是最终展示效果: 总结 通过本次实践,我们深刻认识到有限状态机

    8410

    一个基于Java的开源URL嗅探器

    我们的目标是:检测出尽可能多的恶意链接,但是我们不希望紧紧局限于检测在 RFC 1738 中定义的URL地址,而是希望可以检测出任何能够在真正的浏览器地址栏中输入并且可以访问到的URL地址。...为了取代使用正则表达式,我们手工打造了一个有限状态机来解析出在文本中的URL。 有限状态机(你可以在这里了解更多信息)是由一组状态组成,状态之间可以由输入事件来触发状态转换。...在这种请求下,输入事件就是我们在文本中正在解析的字符。 这个有限状态机有几个状态,主要是基于 URL 的各部分拆分的。状态由一系列的布尔变量保持,每一次一次消耗一个字符,同时进行一次状态转移。...如果状态机在任何一个位置撞到一个非预期的字符,它将返回上一次最新的结束状态,同时重新开始这个算法。 这个最棘手的部分是匹配字符。这些字符实际上,有可能在多个状态中存在。...所以,我们的状态机的平均运行时间有显著的改善: 以下是一些关于性能提升的统计数据( 正则表达式 VS URL的探测器 ): 关于这个库的功能: 它是能够找到并检测任何网址,如: HTML 5 Scheme

    1.6K110

    关于有限状态机(FSM)的一些思考

    动作也不是必须的,也可能只转移状态,不执行任何动作。 最简单的例子:开关灯,通过flick的动作来实现灯的开和关两种状态转移。...: 有限的状态和事件 任何时刻只处于一个状态 特定条件下会进行状态迁移 举例:使用有限状态机实现一个下载器 下载器存在很多状态,而这些状态是有限的,并且每一次只处于一个状态中,状态之间的迁移需要在特定条件才会发生...,所以它是满足有限状态机的三个特征的,我们可以考虑通过有限状态机来实现一个高质量下载器。...,无法在一个地方整体看出整个状态机的逻辑 逐个解释一下这三种实现方式: 分支逻辑法 分支逻辑法比较简单,就是在代码中通过if-else或者switch-case来直译状态机,来看看我们的下载器目前是怎么判断状态的...后面的状态模式通过继承和多态的方式来实现,一个是可以减少重复,第二个可以更明确状态的输入和输出,单元测试也会变得好写。

    2.1K31

    笨办法学 Python · 续 练习 30:有限状态机

    ,都有一个可怕的章节,关于有限状态机(FSM)。...定义事件的另一种方法是“输入触发器”,类似于if语句中的布尔表达式,但通常不太复杂。事件可以是按钮点击,从流中接收字符,更改日期或时间,以及几乎任何用于声明事件的东西。...状态就是你的 FSM 停止的任何“位置”,同时它等待更多的事件,并且你定义的每个状态都允许事件(输入)。事件往往是暂时的,而状态通常是固定的,而且二者都是可以存储的数据。...状态可以是“开始”,“按下某键”,“中止”或类似的方式,描述执行的可能位置中的 FSM 的位置。每个状态都意味着正在等待某事发生,在决定下一步做什么之前。...这使得它们非常容易进行调试,测试和正确实现,因为你确切地知道每个状态的可能性,以及在每个状态中,对于每个事件可能发生的情况。

    51320

    手写一个四则运算表达式转换成AST的方法(上)

    2 javascript 与抽象语法树 AST 我们知道,几乎任何语言中,代码在 "编译"(解释型语言在运行时也有编译的过程) 的过程中,都会生成一种树状的中间状态,这就是 AST。...我们看一个简单的例子, 1 + 2.3 很明显这个表达式是可以分成三个 Token ,分别是 1 , + , 2.3。 词法分析这里,我们可以用有限状态机来解决。...3.1 有限状态机 绝大多数语言的词法部分都是用状态机实现的,我们下面就画出有限状态机的图形,然后根据图形直观地写出解析代码,总体图大概是这样。 ? 下面拆开细看。...3.2 开始(start)状态 ? 状态机的初始状态是 start 。 start 状态下输入数字(0 ~ 9)就会迁移到 inInt 状态。...3.7 小结 自此,我们利用「用有限状态机」成功实现了「词法分析」,后面将进入到「语法分析」。 敬请期待下篇,「手写一个四则运算表达式转换成 AST 的方法(下)」。

    1.6K40

    ‘SHIT’上最全有限状态机设计研究(一)-状态机介绍

    图1 时序电路基本结构   时序电路如图1所示:组合逻辑接收电路输入信号并输出结果,时序逻辑将组合逻辑的输出存储并反馈回组合逻辑,以此来形成电路的当前状态(current state),当前状态和电路输入信号经过组合逻辑作用形成电路的下一状态...有限状态机由组合逻辑电路和若干寄存器组成,根据电路的输入和电路当前状态决定电路的输出。...Moore机属于异步输出状态机,它的输出仅为当前状态的函数,与当前输入信号无关。当然,当前状态是和上一时刻的输入信号相关的,当前输入的变化必须等待下一时钟到来使状态发生变化时才能导致输出的变化。...对于状态机另一个需要考虑的就是状态机编码,在表1.1中,列出了几个状态机编码的编码方式,其中二进制码和格雷码是压缩码形式,具体优缺点如下:(1)独热编码。...FSM进行设计优点:   1)有限状态机能够按照输入信号的控制和预先设定的执行顺序在各个状态间顺畅地切换,具有明显的顺序特征,能够很好地执行顺序逻辑;   2)有限状态机设计方法非常规范,设计方案相对固定

    1.3K20

    Python 状态机(transitions)实践

    状态机也是一种算法思想,简单而言,有限状态机由一组状态、一个初始状态、输入和根据输入及现有状态转换为下一个状态的转换函数组成。有限状态机是有限个状态以及在这些状态之间的转移和动作等行为的数学模型。...为什么要用状态机? 最近在做一个任务管理系统,涉及到任务状态之间的流转,需要根据当前的触发动作,来把当前任务的状态变更为特定的状态。虽然用流程方式实现了,但阅读起来费劲,还容易出错。...所以就用了状态机。 transitions transitions 是Python 中具有许多扩展的轻量级、面向对象的有限状态机实现库。...说它“最小”是因为虽然这个状态机在技术上是可操作的,但它实际上并没有做任何事情。...'after': 'after_completed' # 状态变更下一个状态之后的触发方法 } 值得注意的是回调方法,比如 can_completed 和 after_completed 这些都定义在基础类中即

    2.4K30

    精读《robot 源码 - 有限状态机》

    1 概述 本期精读的是有限状态机管理工具 robot 源码。 有限状态机是指有限个数的状态之间相互切换的数学模型,在业务与游戏开发中有限状态都很常见,包括发请求也是一种有限状态机的模型。...笔者将在简介中介绍这个库的使用方式,在精读中介绍实现原理,最后总结在业务中使用的价值。...至于为什么要用有限状态机管理工具,官方文档举了个例子 - 点击编辑后进入编辑态,点击保存后返回原始状态的例子: 点击 Edit 按钮后,将进入下图的状态,点击 Save 后如果输入的内容校验通过保存后再回到初始状态...4 总结 有限状态机相比普通业务描述,其实是增加了一些状态间转化的约束来达到优化状态管理的目的,并且状态描述也会更规范一些,在业务中具有一定的实用性。...当然并不是所有业务都适用有限状态机,因为新框架还是有一些学习成本要考虑。最后通过源码的学习,我们又了解到一些新的框架级小技巧,可以灵活应用到自己的框架中。

    49210

    有限状态机抽取地址

    有限元状态机 什么是有限状态机 有限状态机(英语:finite-state machine,缩写:FSM)又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。...img 简单来说,有限状态机是一个特殊的有向图,它包括一些状态(节点)和连接这些状态的有限弧,他有一个开始状态和一个终止状态,以及若干中间状态,每个弧上带有一个状态进入下一个状态的条件。 例如: ?...识别地址的有限状态机 代码实现有限状态机查找地址: #!...raise InitializationError("at least one state must be an end_state") while True:#检查最新的状态是否在结束状态中...,特别是加权的有限状态机传感器(Weighted Finite State Transducer,简称WFST),和离散的马尔科夫链模型一致 WFST的特殊性在于:有限状态机中的每个状态由输入和输出符号定义

    1K10

    实现JavaScript语言解释器(一)

    基于有限状态机 由于所有的正则表达式都可以转化为与其对应的有限状态机,所以词法分析同样也可以使用有限状态机来实现。那么什么是有限状态机呢?...有限状态机的英文名称是Finite State Machine(FSM),它有下面这些特点: 它的状态是有限的 它同一个时刻只能有一个状态,也就是当前状态 在接收到外界的数据后,有限状态机会根据当前状态以及接收到的数据计算出下一个状态并转换到该状态...我们先来为这个有限状态机定义一下上面提到的状态机三要素: 状态集:状态集应该包含状态机在接收到任何输入后出现的所有状态,对于上面的状态机会有下面的状态: initial:初始状态 number:当状态机识别到数字字面量时会处于这个状态...反之,如果状态机发现没有新的字符可以输入而自己又处于一个非终止的状态,它就会抛一个叫做Unexpected EOF的错误 以上就是使用有限状态机来实现词法分析器的一个简单例子,Simple解释器的词法分析实现和上面的步骤是一样的...这些位置信息会在代码报错的时候帮助开发者定位错误 小结 在本篇文章中我为大家介绍了Simple这个项目的背景和内容,然后再为大家介绍了一些简单的编译原理基础知识,最后再详述了如何使用有限状态机来实现词法分析并且解读了

    1.3K30

    Lvs IP负载均衡技术

    通过直接路由实现虚拟服务器(VS/DR)   在VS/NAT的集群系统中,请求和响应的数据报文都需要通过负载调度器,当真实服务器数目在10-20之间时,负载调度器将成为整个集群系统的新瓶颈。...Server根据路由表将响应报文通过外网(eth0)直接返回给用户,请求报文的目标地址改为VIP,响应报文的源地址也为VIP,所以响应报文不需要做任何修改,直接返回给客户 ?   ...在VS/DR响应报文根据服务器的路由表直接返回给用户,而不经过负载调度器,所以负载调度器只处于从客户到服务器的半连接中,我们给出半连接的TCP有限状态机。...如下图为VS/DR的TCP状态转移,圈表示状态,箭头表示状态间的转换,箭头上的标识表示在当前状态上收到该标识的输入,迁移到下一个状态。VS/DR的TCP状态迁移是按照半连接的TCP有限状态机进行的。...7、客户得到正常的服务,而不知道是哪一台服务器处理的。   VS/DR负载调度器也只处于从客户到服务器的半连接中,按照半连接的TCP有限状态机进行状态迁移。 ?

    1.5K90

    基于FPGA的电子计算器设计(上)

    从此Verilog作为硬件描述语言的业界标准之一,在电子设计领域得到广泛应用,并逐步成为事实上的通用硬件描述语言。...3.3 状态机原理 运算部分我们主要应用了状态机进行运算和存储的,主要是有限状态机,下面对有限状态机进行简单的介绍。...在有限状态机中,会有有许多变量,例如,状态机有很多与动作(actions)转换(Mealy机)或状态(摩尔机)关联的动作,多重起始状态,基于没有输入符号的转换,或者指定符号和状态(非定有限状态机)的多个转换...它能处理任何顺序的事件,并能提供有意义的响应,即使这些事件发生的顺序和预计的不同。有限状态机正是为了满足这方面的要求而设计的。 有限状态机是一种概念性机器,它能采取某种操作来响应一个外部事件。...为一个事件而响应的行动不仅取决于事件本身,还取决于机器的内部状态。另外,采取的行动还会决定并更新机器的状态。这样一来,任何逻辑都可建模成一系列事件/状态组合。

    1.3K20

    Kotlin Vocabulary | 揭秘协程中的 suspend 修饰符

    这种实现可以使函数在可能的情况下同步返回。...Kotlin 编译器会确定函数何时可以在内部挂起,每个挂起点都会被声明为有限状态机的一个状态,每个状态又会被编译器用标签表示: fun loginUser(userId: String, password...如果不是第一次调用,它将继续执行状态机 (挂起函数)。 现在,我们来看看编译器生成的用于在状态间切换并分享信息的代码: /* Copyright 2019 Google LLC....下面我们来看看编译器生成了什么: when 语句的参数是 LoginUserStateMachine 实例内的 label; 每一次处理新的状态时,为了防止函数被挂起时运行失败,都会进行一次检查; 在调用下一个挂起函数...(即 logUserIn) 前,LoginUserStateMachine 的 label 都会更新到下一个状态; 在当前的状态机中调用另一个挂起函数时,continuation 的实例 (LoginUserStateMachine

    2.2K10
    领券