Ruby 和 Python 版本的“self”有什么区别?

2023-11-21

我已经完成了一些 Python,但现在才开始使用 Ruby
我可以很好地解释这两种语言中“自我”之间的区别。

乍一看很明显:
Self 不是 Python 中的关键字,但无论你如何称呼它,都有一个“self-like”值。
Python 方法接收 self 作为显式参数,而 Ruby 则不然。
Ruby 有时使用点符号将方法显式定义为 self 的一部分。

初步谷歌搜索显示
http://rubylearning.com/satishtalim/ruby_self.html
http://www.ibiblio.org/g2swap/byteofpython/read/self.html


Python 的设计目的不仅仅是支持面向对象编程。在方法和函数之间保留相同的接口可以让两种风格更清晰地互操作。

Ruby 是从头开始构建的,它是面向对象的。甚至文字也是对象(评估 1.class,你会得到 Fixnum)。该语言的构建使得 self 是一个保留关键字,无论您身在何处,它都会返回当前实例。

如果您位于某个类的实例方法内,则 self 是对所述实例的引用。

如果您在类本身的定义中(而不是在方法中),则 self 是类本身:

class C
  puts "I am a #{self}"
  def instance_method
    puts 'instance_method'
  end
  def self.class_method
    puts 'class_method'
  end
end

在类定义时,将打印“I am a C”。

直接的“def”定义实例方法,而“def self.xxx”定义类方法。

c=C.new

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

Ruby 和 Python 版本的“self”有什么区别? 的相关文章

随机推荐

  • CDI 部署失败:WELD-001414 Bean 名称不明确

    我有一个应用程序 它有多个模块和各种依赖项 当我在 Glassfish 4 上部署应用程序时 出现错误 org jboss weld exceptions DeploymentException WELD 001414 Bean name
  • PHP验证24小时时间格式

    我允许用户选择一个小时00 00 00 to 23 00 00并需要检查他们是否提交了正确的格式 是否有正则表达式或 php 函数可以验证 24 小时格式 例如HH MM SS 我找到了一些正则表达式示例 但我验证的 24 小时时间始终设置
  • 如何使用杰克逊模块休眠序列化延迟加载的实体?

    我正在尝试使用 angularjs 和 springmvc 构建一个应用程序 我有两个类 Province 和 Comunidad Entity name Provincia Table name T PROVINCIA public cl
  • 在 Android AOSP 中使用预构建共享库

    我想在 AOSP 中使用预构建的共享库 该库在 Android mk 中定义如下 include CLEAR VARS LOCAL MODULE foo LOCAL MODULE SUFFIX so LOCAL MODULE CLASS S
  • TypeScript - 防止 null 的类型

    我已经使用下面的守卫打字nullobject prop 但仍然出现错误 function a par a string b null string a string b string undefined if par b null retu
  • 实体框架 Code First 4.3 / 相关表的 LINQKit 谓词

    我正在使用 Entity Framework 4 3 1 和 Code First 方法 另外 我正在使用 LinqKit 以便使用 PredicateBuilder 如果我有这样的表 位置 时区 多 1 我希望有这样的东西 Express
  • Struts struts-config.xml 动作映射解释

    我是 Struts 框架的菜鸟 我试图了解动作映射到底是如何工作的 假设我有一个发送 AJAX 请求的 JavaScript 文件 button click function ajax url myTestUrl do success fu
  • 孩子们如何收听/捕捉父母的事件

    父级如何触发自定义事件来通知其子级 兄弟姐妹 例如 div div div div div2 had addEventListener customEvent2 doSth 进而div1将触发自定义事件 customEvnet2 但这永远不
  • 何时使用“self”访问属性

    我已经阅读了该网站上有关此问题的许多问题 我的理解如下 self property 访问手动或通过 synthesize 创建的 getter setter 方法 根据属性是否被声明为保留 复制等 保留计数被正确修改 例如保留属性 释放先前
  • 当多个客户端推送到同一个远程仓库时,git如何处理并发问题?

    对于每个http请求 一个单独的进程git http backend运行在服务器端 当多个客户端推送到同一个远程存储库时 它如何处理并发问题 例如 它是否创建锁定文件以及名称是什么 注意 远程存储库是裸露的 与通过 SSH 调用的方式相同
  • 使用用户定义的转换将字符串转换为类型安全枚举

    为了将 Enum 与字符串结合使用 我实现了一个基于 StringEnum 类https stackoverflow com a 424414 1293385 但是 当我尝试实现建议的用户定义转换操作时 我遇到了问题 StringEnum类
  • 应用工具栏时崩溃

    我是 Android 编程新手 当我将工具栏应用到我的应用程序中时 我遇到了这个问题 当我尝试运行该应用程序时 它崩溃了 这是代码 ToolbarActivity java package com example toolbar impor
  • 异步方法中的最后一个异步调用是否需要等待?

    我无法理解当异步方法调用是我的异步方法中的最后一个调用时是否需要等待语句 例如 public async Task CallAsync byte data await Call1Async data Call2Async data publ
  • Hibernate OnetoMany、ManyToOne 映射给出 null

    我有 2 个类 名为 PurchaseList java 和 PurchaseListItems java 我必须在PurchaseListItems 中映射PurchaseList 采购清单 java OneToMany cascade
  • gitea 和 jenkins webhook

    我正在测试 Gitea 并希望它能够触发 Jenkins 构建 这是非常基本的用例 我知道现有的 GOGs webhook 插件可以使用 但最近还发现 Jenkins 也有一个 Gitea 插件 在 GOGS 情况下 您可以通过以下方式致电
  • Ruby 安装 (2.2.2) 在 macOS Big Sur 中失败

    我在 macOS Big Sur 上安装 Ruby 2 2 2 时遇到了一些问题 有人遇到过类似的问题并且能够解决吗 非常感谢 Error Downloading openssl 1 0 2u tar gz gt https dqw8nmj
  • Android M:如何获取当前前台活动包名称(从服务)

    在Android L上很容易从ActivityManager服务中获取正在运行的任务列表 并且首先返回当前活动的任务 但它不再适用于 Android M 返回列表仅包含我的应用程序任务 有什么办法解决吗 My code List
  • 计数汽车 OpenCV + Python 问题

    我已经trying在过线时计算汽车数量 它可以工作 但问题是它对一辆车进行多次计数 这是荒谬的 因为它只应该计算一次 这是我正在使用的代码 import cv2 import numpy as np bgsMOG cv2 Backgroun
  • 为什么 (long)9223372036854665200d 给我 9223372036854665216?

    我知道一些带有精确误差的奇怪东西 但我无法理解 Why is long 9223372036854665200d给我9223372036854665216 9223372036854665200d是类型常量double 然而 9223372
  • Ruby 和 Python 版本的“self”有什么区别?

    我已经完成了一些 Python 但现在才开始使用 Ruby我可以很好地解释这两种语言中 自我 之间的区别 乍一看很明显 Self 不是 Python 中的关键字 但无论你如何称呼它 都有一个 self like 值 Python 方法接收