Ruby 和 Python 如何实现它们的交互式控制台?

2024-01-06

在为我的编程语言实现解释器时,我首先想到了一个简单的控制台窗口,它允许用户输入一些代码,然后将其作为独立程序作为 shell 执行。

但存在严重的问题:如果用户输入的每一行代码都作为独立程序处理,则它必须经过分词器和解析器,然后由解释器执行 - 那么函数呢?

  • Python/Ruby 交互式控制台(IDLE、irb)如何“共享”代码?输入的代码如何处理?

Example:

>> def x:
>>  print("Blah")
>> 
>> x()

该函数存储在哪里以便可以随时再次调用?

交互式控制台如何将输入的所有内容视为明显的一个程序,而不一遍又一遍地执行所有内容?


对于 Python,只有所有括号、方括号等都匹配时,表达式才完整。这很容易检测到。在输入完全空白的行之前,函数/类定义并不完整。然后编译器编译输入的表达式或定义并运行它。

与普通函数、类、模块等非常相似,REPL 具有自己的本地作用域。正是这个作用域用于输入 REPL 中的变量和定义。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby 和 Python 如何实现它们的交互式控制台? 的相关文章

  • Python Nose 导入错误

    我似乎无法理解鼻子测试框架 https nose readthedocs org en latest 识别文件结构中测试脚本下方的模块 我已经设置了演示该问题的最简单的示例 下面我会解释一下 这是包文件结构 init py foo py t
  • Spark MLlib - 训练隐式警告

    我在使用时不断看到这些警告trainImplicit WARN TaskSetManager Stage 246 contains a task of very large size 208 KB The maximum recommend
  • Python 在 chroot 中运行时出现错误

    我尝试在 chroot 中运行一些 Python 程序 但出现以下错误 Could not find platform independent libraries
  • 底图上的子图

    我有一张英国地图和 121 个地点 每个地点有 3 个值 我想绘制 121 个位置中每个位置的三个值的小条形图 目前 这些值绘制为markersize属性 看起来像这样 密集恐惧症情节 https i stack imgur com 5fv
  • 子进程改变目录

    我想在子目录 超级目录中执行脚本 我需要首先进入该子目录 超级目录 我无法得到subprocess进入我的子目录 tducin localhost Projekty tests ve python Python 2 7 4 default
  • Python的reduce()短路了吗?

    If I do result reduce operator and False 1000 得到第一个结果后它会停止吗 自从False anything False 相似地 result reduce operator or True 10
  • Django 的 URL 覆盖率测试为 0%,为什么?

    使用姜戈鼻子 我对 URL 进行了测试 但 URL 覆盖率仍然为 0 为什么 python manage py 测试配置文件 这是我的报道 Name Stmts Miss Cover Missing profiles 0 0 100 pro
  • 用Python中的嵌套for循环替换重复的if语句?

    在我编写的下面的代码中 n 4 所以有五个 if 语句 所以如果我想将 n 增加到 比如说 10 那么就会有很多 if 语句 因此我的问题是 如何用更优雅的东西替换所有 if 语句 n p 4 5 number of trials prob
  • 如何使用 Python 多处理避免在分叉进程中加载​​父模块

    当您创建一个Pool使用Python的进程multiprocessing 这些进程将分叉 父进程中的全局变量将显示在子进程中 如下面的问题所述 如何限制多处理进程的范围 https stackoverflow com questions 2
  • Django - 电子邮件发送两次

    每当我使用如下所示的电子邮件设置从views py调用下面的方法时 电子邮件的两份副本都会发送给收件人 并且我收到如下所示的错误 def sendEmailBasic request msg EmailMessage Request Cal
  • Python 视频框架

    我正在寻找一个 Python 框架 它将使我能够播放视频并在该视频上绘图 用于标记目的 我尝试过 Pyglet 但这似乎效果不是特别好 在现有视频上绘图时 会出现闪烁 即使使用双缓冲和所有这些好东西 而且似乎没有办法在每帧回调期间获取视频中
  • Matplotlib 图例不工作

    自从升级 matplotlib 以来 每当尝试创建图例时 我都会收到以下错误 usr lib pymodules python2 7 matplotlib legend py 610 UserWarning Legend does not
  • 参数验证,Python 中的最佳实践[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 让我们举一个 API 的例子 def get abs directory self path if os path isdir path ret
  • Rails 基本 Base64 身份验证

    我正在尝试复制此 GET curl 请求 curl D X GET H Authorization Basic dGVzdEB0YXByZXNlYXJjaC5jb206NGMzMTg2Mjg4YWUyM2ZkOTY2MWNiNWRmY2Nl
  • 为什么“return self”返回 None ? [复制]

    这个问题在这里已经有答案了 我正在尝试获取链的顶部节点getTopParent 当我打印出来时self name 它确实打印出了父实例的名称 然而 当我回来时self 它返回 None 为什么是这样 class A def init sel
  • Django 接受 AM/PM 作为表单输入

    我试图弄清楚如何使用 DateTime 字段在 Django 中接受 am pm 作为时间格式 但我遇到了一些麻烦 我尝试在 forms py 文件中这样设置 pickup date time from DateTimeField inpu
  • Jupyter Notebook:没有名为 pandas 的模块

    我搜索了其他问题 但没有找到任何有帮助的内容 大多数只是建议您使用 conda 或 pip 安装 pandas 在我的 jupyter 笔记本中 我试图导入 pandas import pandas as pd 但我收到以下错误 Modul
  • Spyder 如何在同一线程的后台运行 asyncio 事件循环(或者确实如此?)

    我已经研究 asyncio 模块 功能几天了 因为我想将它用于我的应用程序的 IO 绑定部分 并且我认为我现在对它的工作原理有一个合理的理解 或者在至少我认为我已经理解了以下内容 任一时刻 任一线程中只能运行一个异步事件循环 一旦一切都设置
  • 如何使用Featuretools按列值从单个数据框中的多个列创建特征?

    我正在尝试根据之前的结果来预测足球比赛的结果 我在 Windows 上运行 Python 3 6 并使用 Featuretools 0 4 1 假设我有以下代表结果历史记录的数据框 原始数据框 https i stack imgur com
  • Python 枚举子集迭代

    我想迭代以下枚举的子集 class Items enum Enum item1 0 item2 1 item3 2 item4 3 item5 4 item6 5 item7 6 item8 7 说我想 for item in Items

随机推荐

  • Django:如何迁移运行时创建的动态模型

    在我的 Django 应用程序中 特定的用户输入将导致创建新模型 这是我用来创建模型并注册它的代码 model type model name ExistingModel attrs admin site register model ad
  • 如何让 Safari 发送 if-modified-since 标头?

    当我生成页面时 我发送标题 HTTP 1 1 200 OK Cache Control private Content Type text html charset utf 8 Last Modified Mon 04 Apr 2011 2
  • PHP 中的 JavaScript 函数 fromCharCode()

    var test String fromCharCode 112 108 97 105 110 document write test Output plain 有没有 PHP 代码可以用作String fromCharCode JavaS
  • CanCan::Ability current_user 方法在哪里定义?

    差不多就是我在标题中提到的内容 我在代码中使用 CanCan Ability 来检查权限和能力 它期望定义一个 current user 方法 我猜它来自 devise 但不确定 我希望覆盖它 最好的方法是什么 被发现了here https
  • JQuery:可以有 3 个输入的滑块吗?

    我想创建一个具有 3 个输入的滑块 我做了很多研究 但找不到比带有 2 个输入的滑块更多的东西 这是代码 http jqueryui com slider range http jqueryui com slider range 如何创建
  • pip - 使用项目文件夹作为安装源

    我想配置pip使用自定义搜索路径从本地文件夹安装包 该文件夹未托管在 PyPI 上 目标是能够运行 pip install user my non published package 并让它安装所述软件包 home myuser proje
  • JSTree 检查所选节点是否为叶子或仅叶子可选

    我创建了一个jstree如下 js tree jstree core data url pageContext request contextPath makeTree plugins types search data function
  • SAM 模板内的 IAM 角色

    如何在 SAM 模板中创建 IAM 角色 就像我在 SAM 包中所做的那样 我尝试了如下 lambdaFunctionRole Type AWS IAM Role Properties AssumeRolePolicyDocument Ve
  • 如何从父文档访问 iframe 内的元素?

    function contents nb name height 1 document getElementById contents iframe height height px 2 var currentIFrame contents
  • 有效 32 位有符号整数的正则表达式

    我很确定这个网站实际上还没有回答这个问题 一劳永逸地 匹配 32 位有符号整数范围内的数字字符串的最小正则表达式是什么 2147483648 to 2147483647 I must使用正则表达式进行验证 这是我可用的唯一选项 我努力了 d
  • 如何将接口转换为 C# 中的类型?

    我有一个返回接口的属性 在调试过程中 我可以中断返回的内容 虽然它是接口 但 Visual Studio 足够聪明 可以知道它实际上是什么派生类型 我认为它正在使用反射或其他东西 我不知道 我的问题是 我可以在运行时获得相同的信息 以便我可
  • 在 Apache Camel 日志中记录简单文本

    可以在 Camel 中记录简单文本 如下所示
  • 按 pandas 中除一个索引列之外的所有内容进行分组

    我的数据分析反复依赖于一个简单但不确定的主题 即 对除外的所有内容进行分组 以这个多索引为例 df accuracy velocity name condition trial john a 1 1 403105 0 419850 2 0
  • 拥有多个文件组是否有助于加快数据库速度?

    目前 我正在开发一个使用 MS SQL Server 2005 进行相当密集计算的产品 在较高的层面上 我的产品的架构基于 运行 的概念 每次我进行一些分析时 它都会存储在一系列中运行表数 每次运行约 100 个表 我遇到的问题是 当运行次
  • 导入 MDC Switch 组件时出现“无法读取未定义的属性‘MDCSwitch’”错误

    我正在使用express和material components web编写一个Node应用程序 但我遇到了一个问题 TextField可以工作 但Switch不能 这是我用来将相关 JS 附加到元素的代码 slice call docum
  • 检测可滚动下拉列表的结尾

    我正在动态生成一个选择选项框 可以有任意数量的选项 当用户向下滚动到框的末尾时 我需要触发一个事件 我将调用服务器并使用更多选项填充选择 这就像创建分页 但是在下拉框中 谁能告诉我如何做到这一点 所以我唯一需要的是当用户滚动到下拉列表的末尾
  • 插件无法加载

    为什么我的插件无法加载 引用了 jquery 和插件链接 该插件名为 请帮我找到代码中缺少的内容
  • 如何设置Y轴高图上点的间隔

    我是第一次使用 highcharts 我试图弄清楚如何将 Y 轴点设置为静态 我使用了 min 0 和 max 140 y 轴上的点为 0 25 50 75 100 125 和 150 其中我希望它为 0 20 40 60 80 100 1
  • 显示 django 对象表

    我需要使用 Django 显示数据库中的表 最明显的方法是手动输入表标题并循环查询结果model objects all 然而 由于很懒 我想自动执行此操作 即通过内省加载模型中的所有字段以显示为列标题 并加载所有字段值以显示为行 这种方法
  • Ruby 和 Python 如何实现它们的交互式控制台?

    在为我的编程语言实现解释器时 我首先想到了一个简单的控制台窗口 它允许用户输入一些代码 然后将其作为独立程序作为 shell 执行 但存在严重的问题 如果用户输入的每一行代码都作为独立程序处理 则它必须经过分词器和解析器 然后由解释器执行