ruby:类实例变量与实例变量

2024-06-26

我的想法是为来自不同国家的人们创建一个社区维基java因为读了很多解释,我无法理解任何东西,直到我真正尝试了一些东西,拼图的各个部分开始找到它们的位置。但我首先需要确保我做对了。来自这样的背景,我很困惑地发现@variable可能意味着两个截然不同的事情。 这是一个例子:

class Test
  @ins = "gah"
  def self.ins
    puts @ins
  end

  def initialize()
    @ins = "wtf?"
  end
  def ins2
    puts @ins
  end
end

据我了解,第一个@ins是代表类的对象的实例变量Test。第二@ins是类对象中的实例变量Test.

现在事情对我来说开始有意义了。这里有几个例子:

[14] pry(main)> test.ins2
wtf?

我们正在调用对象的方法,它返回对象的实例变量。

[15] pry(main)> test.ins
NoMethodError: undefined method `ins' for #<Test:0x000000017d9348 @ins="wtf?">

我们试图通过一个对象调用一个类方法,这个方法是类的,所以我们得到NoMethodError

[16] pry(main)> Test.ins
gah

我们正在调用一个类方法,以便它正确地看到类对象的实例变量。

[17] pry(main)> Test.ins2
NoMethodError: undefined method `ins2' for Test:Class

我们通过类调用一个对象方法,这是不正确的,所以抛出NoMethodError.

以上所有操作都是使用 ruby​​ 2.0 执行的。那么我在问什么呢?

  • 我说得对吗?
  • 我对红宝石术语的理解正确吗?
  • 类实例变量的任何实际用法合理在一个正确设计的应用程序中?或者这些只是更好的@@class 变量?

发现这一点让我很困惑@variable可能意味着两个截然不同的事情。

不,事实并非如此。类是对象,就像任何其他对象一样。它们可以像任何其他对象一样拥有实例变量。它们可以像任何其他对象一样具有实例方法。事实上,与 Java 拥有三种不同的“方法”(实例方法、静态方法和构造函数)不同,Ruby 中只有一种方法:实例方法。

将类作为对象的美妙之处在于@variable总是意味着完全相同的事情.

不存在类实例变量这样的东西:它只是一个像其他变量一样的普通实例变量。该对象恰好是一个实例Class,但这不会改变实例变量的性质。类对象的实例变量String不是字符串实例变量,它只是一个实例变量。同样,类的对象的实例变量Class只是一个实例变量。

不存在类方法这样的东西:它只是一个对象的普通单例方法,该对象恰好是一个实例Class。 (实际上,也不存在单例方法这样的东西:它只是对象的单例类的普通实例方法。)

注意:Ruby 开发者可能会在随意的谈话中使用术语“类方法”。但这并不意味着类方法确实存在,它仅仅意味着“类对象的单例类的实例方法”是拗口的。重要的是:因为类是对象,所以它们可以工作exactly像所有其他物体一样。他们可以有实例方法(在类中定义Class或继承自Module, Object, Kernel or BasicObject),它们可以具有“单例方法”(实际上是各自单例类的实例方法),它们可以具有实例变量。

他们能also有类变量(@@variables)……这些很奇怪。别理他们 :-)

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

ruby:类实例变量与实例变量 的相关文章

  • 在 Rails 中将一列添加到另一列之前

    我想在我的桌子前面放一个柱子我知道你可以做到 add column customer first name after last name 但有什么办法吗 before 您可以使用以下命令在表格前面插入一列 first option add
  • 无主键的 ActiveRecord 模型

    我有一个 ActiveRecord 模型GPA没有主键 class GPA lt ActiveRecord Base end 当我尝试打电话时GPA first to json I get TypeError false is not a
  • Windows 上的 ruby​​ 中出现 SSL 错误

    我收到以下错误 C Users user Desktop folder gt ruby exchange rate rb C Ruby23 x64 lib ruby 2 3 0 net http rb 933 in connect nonb
  • 如何在没有 sudo 的情况下安装 gem

    在我所有的 gem 安装中 我必须执行 sudo 所以 sudo gem 安装rails 会起作用 而只有 宝石安装导轨 不管用 我该如何补救 我安装了rvm murtaza murtaza dev which rvm home murta
  • Bundler 找不到 gem“rack”的兼容版本:

    我是 Ruby 新手 但实际上如果我不想安装 Redmine 我就不需要它 我正在按照以下说明进行操作http www redmine org projects redmine wiki HowTo install Redmine on C
  • Ruby:如何将多个方法调用与“发送”链接在一起

    必须有一种内置的方法来做到这一点 对吧 class Object def send chain arr o self arr each a o o send a return o end end 我刚刚遇到了这个 它确实需要注入 def s
  • RVM 要求错误

    我安装了 OS X Mavericks 并且正在尝试运行rvm requirements在终端中 它给了我这个错误 Installing required packages autoconf automake libtool pkgconf
  • rspec Rails 测试:如何强制 ActiveJob 作业内联运行某些测试?

    我希望我的后台作业能够内联运行某些标记的测试 我可以通过包装测试来做到这一点perform enqueued do但我希望能够用元数据标记它们 并且如果可能的话 它会自动发生 我尝试过以下方法 it does everything in t
  • puma 初始化程序不适用于 Rails 4.2

    我之前安装过很多次puma 从来没有出现过这个问题 我逐字遵循heroku 的指示 我创建了一个Procfile里面有这个 web bundle exec puma C config puma rb 这是配置文件 puma rb worke
  • 在 Ruby 中使用 `module_function` 定义模块函数与使用 `self.` 定义它相同吗?

    正在定义一个模块函数module function与定义它相同self 在鲁比 也就是说 它们是否都会导致实例方法和模块方法的创建 No module M1 def self foo end end module M2 module fun
  • Hashie::Mash 从字符串恢复

    我在这个问题上很挣扎 我已经存储了一个Hashie Mash到一个字符串中 我很难将其恢复为哈希值 这是字符串 map Hashie Mash ncreated at Mon Jul 30 15 42 20 0000 2012 nid 22
  • 如何在 swagger 中传递多值查询参数

    我在 swagger yml 中有以下服务 该服务被编写为可以多次传递page id 例如 pages page id 123 page id 542 我检查了这个链接https swagger io specation https swa
  • Json(/hash) 到 ruby​​ 对象?

    在 Javascript 中 您可以将 json 作为对象访问 person name first Peter last Parker person name first 在红宝石中我必须像这样使用它 person name first 是
  • 使用 authlogic-oauth2 服务器无法启动

    我已将 oauth2 和 authlogic oauth2 包含在 gemfile 中 因为我想使用它们并尝试启动服务器 它没有启动并给我错误 Library Ruby Gems 1 8 gems railties 3 0 3 lib ra
  • 如何从 Sinatra 中删除路线?

    我有一些动态加载的插件 它们在启动时注册它们的路由 但是我还需要能够在禁用它们时删除它们的路由 有没有办法删除现有的路线 API 没有任何我能找到的方法来删除它们 我能想到的唯一其他方法就是直接访问 Sinatra Base 中的 rout
  • 减少哈希值

    我在使用reduce 语法时遇到了问题 我有以下格式的哈希 H Key1 gt 1 Key2 gt 2 我想使用reduce 来查找该函数中值的总和 就像是 H reduce 0 memo elem memo elem 我知道这是错误的 我
  • 如何向除rails/actioncable中的发件人之外的所有客户端发送消息?

    在socket io中 您可以向除发送者之外的所有客户端发送消息 例如 socket broadcast emit user connected 但在 Rails ActionCable 中 该怎么做呢 class BoardChannel
  • Rails:构建涉及多态关联和 STI 的查询

    我正在尝试查找有关照片的 10 条最新评论 以便将它们集成到我的 Rails 3 0 3 应用程序上的活动提要中 我有一个Photo模型 它继承自Upload使用单表继承的模型 class Upload lt ActiveRecord Ba
  • Ruby 相当于 Python 的多处理模块是什么?

    为了在 Ruby 或 Python 中获得真正的并发性 我需要创建新的进程 Python 使用以下命令使这变得非常简单multiprocessing模块 它抽象了所有 fork wait 的好处 让我专注于我的代码 Ruby 有类似的东西吗
  • RubyMine - 没有为项目配置 Ruby 解释器

    我进入 设置 Ruby SDK 和 Gems 然后选择C RailsInstaller Ruby1 9 3 bin ruby exe 它在右侧加载了一堆宝石 看起来它会起作用 我点击 确定 但仍然有糟糕的语法突出显示 并且它仍然认为它没有

随机推荐