Ruby 和 Python 中的范围

2024-01-01

我一直在同时学习 Ruby 和 Python,我注意到的一件事是这两种语言似乎以不同的方式对待作用域。这是我的意思的一个例子:

# Python
a = 5
def myfunc():
  print a

myfunc() # => Successfully prints 5

# Ruby
a = 5
def myfunc
  puts a
end

myfunc # => Throws a "NameError: undefined local variable or method `a' for main:Object"

看来 def 块可以访问在 Python 中声明在其直接作用域之外的变量,但不能在 Ruby 中访问。有人可以确认我的理解是否正确吗?如果是这样,这些范围思考方式中的一种是否在编程中更常见?


免责声明:我不是Python专家

在 python 中,默认情况下,模块中定义的变量是模块变量,因此对于该模块来说是全局的。在 Ruby 中,当您定义小写变量时,它始终是局部变量。局部变量只能在定义它们的块中以及在包装该变量的块中定义的 procs/lambda 中访问。

在 Ruby 中,对于跨作用域的变量,它需要是:

  • 一个常数(ALL_CAPS):如果前缀正确,则始终可访问
  • 类变量(@@double_at):始终可以从定义类和任何子类访问,但不能从外部访问
  • 实例变量(@single_at): 只能从该对象内部访问,并且可以使用 getter 方法从外部访问/get_instance_variable.
  • Global ($starts_with_dollar):一个坏主意。跨越所有范围,无需范围界定。不使用!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby 和 Python 中的范围 的相关文章

  • Python 在 chroot 中运行时出现错误

    我尝试在 chroot 中运行一些 Python 程序 但出现以下错误 Could not find platform independent libraries
  • 子进程改变目录

    我想在子目录 超级目录中执行脚本 我需要首先进入该子目录 超级目录 我无法得到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
  • html 解析器 python

    我正在尝试解析一个网站 我正在使用 HTMLParser 模块 问题是我想解析第一个 a href 评论后 但我真的不知道该怎么做 所以我在文档中发现有一个函数叫做handle comment 但我还没有找到如何正确使用它 我有以下内容 i
  • 如何在 ReportLab 段落中插入回车符?

    有没有办法在 ReportLab 的段落中插入回车符 我试图将 n 连接到我的段落字符串 但这不起作用 Title Paragraph Title n Page myStyle 我想要这样做 因为我将名称放入单元格中 并且想要控制单元格中的
  • 字典中的列表,Python 中的循环

    我有以下代码 TYPES hotmail type hotmail lookup mixed dkim no signatures S Return Path email protected cdn cgi l email protecti
  • 一行Python和SQLite代码,为什么需要加“,”? [复制]

    这个问题在这里已经有答案了 c execute INSERT INTO numbers VALUES random randint 0 100 如果我将上面的代码更改为 c execute INSERT INTO numbers VALUE
  • 在 matplotlib 中使用 yscale('log') 时缺少误差线

    在某些情况下 当使用对数刻度时 matplotlib 会错误地显示带有误差条的图 假设这些数据 例如在 pylab 内 s 19 0 20 0 21 0 22 0 24 0 v 36 5 66 814250000000001 130 177
  • 如何检查列表是否为空?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 例如 如果通过以下内容 a 我如何检查是否a是空的 if not a print Lis
  • 如何强制 Y 轴仅使用整数

    我正在使用 matplotlib pyplot 模块绘制直方图 我想知道如何强制 y 轴标签仅显示整数 例如 0 1 2 3 等 而不显示小数 例如 0 0 5 1 1 5 2 等 我正在查看指导说明并怀疑答案就在附近matplotlib
  • Django 接受 AM/PM 作为表单输入

    我试图弄清楚如何使用 DateTime 字段在 Django 中接受 am pm 作为时间格式 但我遇到了一些麻烦 我尝试在 forms py 文件中这样设置 pickup date time from DateTimeField inpu
  • 大型数据集上的 Sklearn-GMM

    我有一个很大的数据集 我无法将整个数据放入内存中 我想在这个数据集上拟合 GMM 我可以用吗GMM fit sklearn mixture GMM 重复小批量数据 没有理由重复贴合 只需随机采样您认为机器可以在合理时间内计算的尽可能多的数据
  • 使用Beam IO ReadFromPubSub模块时,可以在Python中提取带有属性的消息吗?尚不清楚是否支持

    尝试将具有存储在 PubSub 中的属性的消息拉取到 Beam 管道中 我想知道是否添加了对 Python 的支持 这就是我无法阅读它们的原因 我看到它存在于Java中 pipeline options PipelineOptions pi
  • 如何正确消除字典中的元素直到只剩下一个字符串

    我真的需要这方面的帮助 def get winner dict winner new dict for winner in dict winner first letter winner 0 value dict winner winner
  • 括号内声明的对象的范围

    如果我声明一个这样的对象 void main myclass objectA anotherclass true true 0 即 我通过直接调用后者的构造函数来创建一个 objectA 和另一个对象 anotherclass anothe
  • 最小硬币找零问题——回溯

    我正在尝试用最少数量的硬币解决硬币找零问题 采用回溯法 我实际上已经完成了它 但我想添加一些选项 按其单位打印硬币数量 而不仅仅是总数 这是我下面的Python代码 def minimum coins coin list change mi
  • 在 Python 的 Textmate 中突出显示尾随空格?

    我想做类似的事情this http remysharp com 2008 03 30 trailing white space in textmate Textmate 提示 这样当我在 Python 中编写代码时 尾随空白总是以某种方式突
  • Docker-compose 和 Rails 控制台问题。 “在任何来源中都找不到 rake-13.0.6”

    尝试在 docker 下运行 Rails 控制台时遇到一些问题 所有其他 Rails 命令都按预期工作 但控制台却不然 octopus git master docker compose run web bundle exec rails
  • 从数据集的给定日期范围中提取属于一天的数据

    我有一个数据集 日期范围为 2018 年 1 月 12 日到 8 月 3 日 其中包含一些值 维数为my df数据框是 my df shape 9752 2 每行包含半小时频率 第一行开始于2018 01 12 my df iloc 0 D
  • 从 pandas 数据框中绘制堆积条形图

    我有数据框 payout df head 10 复制以下 Excel 绘图的最简单 最智能和最快的方法是什么 我尝试过不同的方法 但无法让一切都到位 Thanks 如果您只想要一个堆积条形图 那么一种方法是使用循环来绘制数据框中的每一列 并

随机推荐

  • Python桌面应用程序数据库[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions Python支持多种数据库 但我想要
  • Numpy 和 Pandas(通过 conda 安装)比通过 pip 运行得更快?

    我有两个Python环境 3 6 我通过 conda 在一个环境中安装软件包 通过 pip 在另一个环境中安装软件包 然后我发现 conda 提供的 numpy 和 pandas 比 pip 版本运行得更快 对于大多数场景 只是想知道为什么
  • 如何在 iText 中设置标题字体颜色

    HeaderFooter header new HeaderFooter new Phrase test new Font bf times false header setAlignment Element ALIGN CENTER he
  • iPhone 应用程序拾取声音

    我试图根据用户是否发出响亮的声音来执行某个操作 我不想做任何语音识别或任何事情 只需根据 iPhone 是否听到响亮的声音执行操作即可 任何建议 教程 我在苹果开发者网站上找不到任何内容 我假设我没有正确地寻找或搜索 对您来说最简单的事情就
  • Python,如何从文件中读取字节并保存? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想从文件中读取字节 然后将这些字节
  • 如何在 C# 中获取和设置环境变量?

    如何获取环境变量 如果缺少某些内容 请设置该值 Use the 系统 环境 https learn microsoft com en us dotnet api system environment class 方法 var value S
  • 在datalab中导入gcsfs报错

    当我在datalab中导入gcsfs时 import gcsfs 我遇到了与 fsspec 包相关的无效语法错误 和版本有关系吗 File usr local envs py3env lib python3 5 site packages
  • CSS3+Javascript 位置粘性可滚动内容

    我在以下工具的帮助下创建了一个侧边栏position sticky而且效果很好 请参阅下面的脚本以了解带有以下文本的颜色识别 当黑色区域向下滚动时 绿色区域会粘在相对于红色顶栏的粘性位置 但绿色区域的内容溢出了页面的视口 当滚动到达页面末尾
  • 警告:预算:初始超出最大预算

    当我运行时出现以下错误npm build prod Error budgets initial exceeded maximum budget Budget 1 00 MB was not met by 500 42 kB with a t
  • golang TCPConn.SetWriteDeadline 似乎没有按预期工作

    我试图通过检查 golang 返回的错误来检测发送失败TCPConn 写 http golang org pkg net TCPConn Write 但为零 我也尝试过使用TCPConn SetWriteDeadline http gola
  • CPU通用寄存器通常是内存映射的吗?

    我对内存映射和内存映射 I O 感到困惑 通用寄存器 例如 ARM 架构中的 r0 r1 等 通常是内存映射的吗 不 这些寄存器位于实际 CPU 或多核 CPU 的 CPU 核心 内部 您无法通过加载或存储到任何内存地址来访问它们 内存映射
  • 将 angularjs 与 Turbolink 一起使用

    我正在尝试在我的应用程序中使用 Angularjs 框架和 Turbolinks 页面更改后 它不会初始化新的事件侦听器 有什么办法让它发挥作用吗 提前致谢 AngularJS 与 Turbolinks 涡轮链接也AngularJS两者都可
  • 为什么在 NASM 中使用 RIP 相对寻址?

    我有一个适用于 Mac OS X 的程序集 hello world 程序 如下所示 global main section text main mov rax 0x2000004 mov rdi 1 lea rsi rel msg mov
  • 从 JSON 构建 URL

    我创建了一个可以像这样构建嵌套网址的函数 我想知道是否存在更主流的库来构建这样的 url uri 我宁愿使用一个标准 utility urlConstruct scheme https domain domain com path logi
  • android中屏幕方向改变时如何改变布局的位置?

    android中屏幕方向改变时如何改变布局的位置 我有一个按钮Relativelayout 当电话接通时LANDSCAPE the Relativelayout位于底部 当手机打开时 它会转到屏幕右侧PORTRAIT 就像下面这张图一样 我
  • 无法读取 null 错误的属性“addEventListener”,不知道为什么

    每当我将鼠标悬停在图像上时 它不会放大并给出错误 HTML 和 Javascript 代码 这是两个单独的文件 var banner document getElementById banner function enlargePic ba
  • IE - 单击相应标签时未选中隐藏单选按钮

    我刚刚注意到 IE7 中有一个奇怪的行为 我有带有关联标签的单选按钮 如下所示
  • 创建 JSF 自定义组件的快速方法

    我知道创建自定义 JSF 组件的两种方法 1 原生JSF方式 创建JSF组件类 标签等 2 Facelets方式 在xhtml文件中定义组件 然后在facelets taglib中创建适当的解密 目前我正在从事一个项目 不幸的是引入face
  • AWS.HttpClient handleRequest 在 AWS lambda 中不起作用

    我正在使用 AWS HttpClienthandleRequest在用 Node Js 编写的 lambda 函数中使用aws sdk搜索 ElasticSearch url 我正在关注 AWS 文档 https docs amazonaw
  • Ruby 和 Python 中的范围

    我一直在同时学习 Ruby 和 Python 我注意到的一件事是这两种语言似乎以不同的方式对待作用域 这是我的意思的一个例子 Python a 5 def myfunc print a myfunc gt Successfully prin