ruby变量中的实例变量

实例变量以at符号(@)开头,只能在类方法中引用。它们不同于局部变量,因为它们不存在于任何特定范围内。相反,为类的每个实例存储一个类似的变量表。实例变量存在于类实例中,因此只要该实例保持活动状态,实例变量也将保持活动状态。...

实例变量以at符号(@)开头,只能在类方法中引用。它们不同于局部变量,因为它们不存在于任何特定范围内。相反,为类的每个实例存储一个类似的变量表。实例变量存在于类实例中,因此只要该实例保持活动状态,实例变量也将保持活动状态。

Coffee With At Sign

实例变量可以在该类的任何方法中引用。一个类的所有方法都使用相同的实例变量表,而不是局部变量,其中每个方法都有不同的变量表。然而,不需要首先定义实例变量,就可以访问它们。这不会引发异常,但是如果您使用-w开关运行Ruby,变量的值将为nil,并且将发出警告。

此示例演示了实例变量的使用。请注意,shebang包含-w开关,如果出现警告,它将打印警告。另外,请注意类作用域中方法之外的不正确用法。这是不正确的,下面讨论。

为什么@test变量不正确?这与范围和Ruby如何实现有关。在方法中,实例变量作用域引用该类的特定实例。但是,在类作用域中(在类内部,但在任何方法外部),该作用域就是类实例作用域。Ruby通过实例化类对象来实现类层次结构,因此这里有第二个实例。第一个实例是类的一个实例,这就是@test将要去的地方。第二个实例是TestClass的实例化,这就是@value的作用。这有点让人困惑,但请记住永远不要在方法之外使用@instance\u变量。如果需要类范围的存储,请使用@@class\u变量,该变量可以在类范围内的任何位置使用(在方法内部或外部),其行为也相同。

访问器

通常不能从对象外部访问实例变量。例如,在上面的示例中,您不能简单地调用t.value或t.@value来访问实例变量@value。这将打破封装规则。这也适用于子类的实例,它们不能访问属于父类的实例变量,即使它们在技术上是相同的类型。因此,为了提供对实例变量的访问,必须声明访问器方法。

下面的示例演示如何编写访问器方法。但是,请注意,Ruby提供了一个快捷方式,本示例仅用于向您展示访问器方法的工作方式。除非访问器需要某种附加逻辑,否则通常不会看到以这种方式编写的访问器方法。

快捷方式使事情变得更简单、更紧凑。这些辅助方法有三种。它们必须在类范围内运行(在类内部,但在任何方法之外),并将动态定义方法,就像上面示例中定义的方法一样。这里没有魔法,它们看起来像语言关键字,但实际上只是动态定义方法。此外,这些访问器通常位于类的顶部。这使读者能够立即了解哪些成员变量在类外部或子类中可用。

有三种访问器方法。它们各自获取一个描述要访问的实例变量的符号列表。

  • attr_reader-定义“reader”方法,如上面示例中的name方法。
  • attr_writer-定义“writer”方法,如上例中的age=method。
  • attr_访问器-定义“reader”和“writer”方法。

何时使用实例变量

既然您知道了实例变量是什么,那么什么时候使用它们呢?当实例变量表示对象的状态时,应该使用它们。学生的姓名、年龄、成绩等。它们不应用于临时存储,这就是局部变量的用途。然而,它们可能用于多阶段计算的方法调用之间的临时存储。但是,如果您正在这样做,您可能需要重新考虑您的方法组成,并将这些变量改为方法参数。

  • 发表于 2021-09-28 15:01
  • 阅读 ( 183 )
  • 分类:数学

你可能感兴趣的文章

班(class)和实例变量(instance variables)的区别

关键区别–类与实例变量 大多数现代编程语言都支持面向对象编程。对象包含数据或属性。一个物体有一定的行为。它们被称为方法。程序可以使用对象建模。软件是程序的集合。因此,可以使用对象来设计和实现软件。对...

  • 发布于 2020-10-19 16:54
  • 阅读 ( 305 )

这(this)和超级java(super in java)的区别

...this”和“super”在Java编程中使用。这些关键字不能用作变量或任何其他标识符名称。Java支持面向对象编程(OOP)。程序或软件可以使用对象建模。对象使用类是贪得无厌的。OOP的一个支柱是继承。它提供了代码的可重用性。已...

  • 发布于 2020-10-19 18:17
  • 阅读 ( 386 )

指针(pointer)和参考(reference)的区别

...,应该知道数据在执行时被放在内存中的确切位置。指针变量和引用变量用于访问这些数据并操作它们所在的内存地址。也就是说,指针和引用都可以用来间接引用对象。它们基本上把内存地址作为它们的值。指针和引用之间的...

  • 发布于 2020-10-28 19:41
  • 阅读 ( 266 )

最终的(final)和静止的(static)的区别

...例如π’ 这是3.14159号的实用名称。Java有它的常量。这些变量在(a)下不属于任何对象,子(b)一旦设置它们,它们就不会更改其值。变量声明中的静态字显示该变量不属于任何对象。有一个类似的关键字,它说变量值只设置...

  • 发布于 2021-06-25 15:47
  • 阅读 ( 307 )

python(python)和红宝石(ruby)的区别

...例化 –实例化是从类创建对象实例的过程。Ruby中的实例变量是严格私有的,这意味着它们只能通过方法访问,因此需要方法值。实例变量定义“getter”和“setter”方法来访问属性,前者是属性的名称,后者以等号作为后缀。在...

  • 发布于 2021-06-25 22:26
  • 阅读 ( 251 )

违约(default)和参数化构造函数(parameterized constructor)的区别

...反,参数化构造函数是程序员通过传递参数给类中的实例变量初始值而定义的一种构造函数。这就是默认构造函数和参数化构造函数的主要区别。 大多数高级编程语言都支持面向对象编程(OOP)。在OOP中,一切都是一个类,它...

  • 发布于 2021-07-01 05:25
  • 阅读 ( 681 )

实例变量(instance variable)和局部变量(local variable)的区别

实例变量和局部变量之间的主要区别在于,实例变量是在类中但在方法外声明的变量,而局部变量是在方法或构造函数内声明的变量。 面向对象编程(OOP)是软件开发中使用的一种主要编程范式。它允许程序员使用对象来模拟...

  • 发布于 2021-07-01 22:24
  • 阅读 ( 1132 )

参考(reference)和java中的对象(object in java)的区别

...并且存储在特定的内存槽中。“引用”指向存储“对象”变量和方法的位置。类是一个蓝图或模板,提供如何创建对象的说明。对象基于此结构,并根据该类模板填充必要的字段。一个内存引用,简单地说就是名称状态,一个对...

  • 发布于 2021-07-09 16:22
  • 阅读 ( 444 )

ruby中的全局变量

全局变量是可以从程序中的任何位置访问的变量,而不考虑范围。它们以$(美元符号)字符开头表示。然而,全局变量的使用通常被认为是“非Ruby”,并且您很少看到它们。 定义全局变量 全局变量的定义和使用与任何其...

  • 发布于 2021-09-05 06:00
  • 阅读 ( 177 )

自变量的定义及实例

科学实验中的两个主要变量是自变量和因变量。以下是自变量的定义和使用方法: 关键收获:自变量 自变量是你有目的地改变或控制的因素,以观察它有什么影响。 响应自变量变化的变量称为因变量。这取决于自变量。 ...

  • 发布于 2021-09-07 00:14
  • 阅读 ( 291 )
2528090870
2528090870

0 篇文章

相关推荐