Tag: 实例变量

这两个Ruby类初始化定义之间有什么区别?

我正在编写一本关于Ruby的书,作者使用了一种略微不同的forms来编写类初始化定义,而不是在本书的前几节中。 它看起来像这样: class Ticket attr_accessor :venue, :date def initialize(venue, date) self.venue = venue self.date = date end end 在本书的前几节中,它将被定义为: class Ticket attr_accessor :venue, :date def initialize(venue, date) @venue = venue @date = date end end 在第一个示例中使用setter方法与在第二个示例中使用实例变量之间是否存在任何function差异? 他们似乎都工作。 即使将它们混合起作用: class Ticket attr_accessor :venue, :date def initialize(venue, date) @venue = venue self.date = date end end

类方法(ruby)

这里有新手,很难理解类方法以及为什么我无法在实例中正确显示属性。 class Animal attr_accessor :noise, :color, :legs, :arms def self.create_with_attributes(noise, color) animal = self.new(noise) @noise = noise @color = color return animal end def initialize(noise, legs=4, arms=0) @noise = noise @legs = legs @arms = arms puts “—-A new animal has been instantiated.—-” end end animal1 = Animal.new(“Moo!”, 4, 0) puts animal1.noise animal1.color = “black” […]

local,instance和class变量之间有什么区别?

可能重复: 类变量和类实例变量之间的区别? 在阅读Ruby书时,我似乎错过了变量篇。 现在我似乎无法理解以下事情: 什么是实例变量? 什么是类实例变量? variable @instance_var和@class_instance_var之间有什么区别? 我试着阅读不同博客中的一些post,但我仍然不明白。 任何帮助,将不胜感激。

在Ruby的许多类实例中记忆数据的好方法是什么?

考虑:生成数据的对象的许多实例。 每次运行只生成一次数据会很棒。 class HighOfNPeriods < Indicator def generate_data @indicator_data = DataStream.new (0..@source_data.data.count – 1).each do |i| if i < @params[:n_days] … @indicator_data.add one_data end end HighOfNPeriods不同实例有不同的params和不同的@source_data 。 以下是指标的使用方法: class Strategy attr_accessor :indicators def initialize params … end 从Strategy调用HighOfNPeriods.generate_data方法。 每个Strategy都会获得HighOfNPeriods的新实例,因此不可能将其作为某种全局值来实现。 除此之外,它不应该是全球性的。 unless @indicator_data不起作用,因为需要在HighOfNPeriods许多实例之间共享数据。 所以,问题是: What is a good way to memoize the instance variable `indicator_data` or […]

更改Ruby对象的状态会更改其他类成员吗?

我有一个主要在多维数组周围实现一些逻辑的类,它基本上是一个数字网格。 这些数字可以交换位置等。但是,当它们交换时,同一类的其他对象也似乎被修改。 我不知道为什么。 我正在使用实例变量来存储网格,所以我不明白为什么更改显然会影响其他类成员。 这是一个简化的例子; class TestGrid attr_accessor :grid @grid = [] def initialize(newgrid) @grid = newgrid end def to_s out = “” @grid.each{|row| out += row.join(“|”) + “\n” } out end def swap(x, y) @grid[x[0]][x[1]], @grid[y[0]][y[1]] = @grid[y[0]][y[1]], @grid[x[0]][x[1]] end end 当我们与IRB中的单个实例进行交互时,事情看起来很好; 1.9.3-p385 :001 > require ‘./TestGrid.rb’ => true 1.9.3-p385 :002 > x = […]

Rails从application.html.erb渲染实例变量

我正在使用Rails 4书来关注敏捷Web开发,我对渲染方面有点困惑。 该问题的简单版本是…在application.html.erb文件中 render @cart 这很令人困惑,因为我认为需要有一个与该视图相关联的控制器才能知道要使用哪个部分和@cart变量。 是否只是通过命名约定,该行寻找像_cart.html.erb这样的部分? 在那种情况下,它实际上不知道@cart是什么,直到它呈现部分? 一些澄清是可爱的。 谢谢!

在类ruby之间共享实例变量

我知道这个问题之前已经得到了回答,但我似乎无法使任何解决方案都有效 我正在为我需要调用的API创建一个ruby包装器。 Interface类完成了api的所有会话处理和实际调用,但是我想为我将最常执行的函数构建帮助器类。 我遇到的问题是我需要一种方法来跨多个辅助类维护一个Interface类的实例。 这是我到目前为止的代码 require_relative ‘interface’ module Api_Helper attr_accessor :xmlmc #get a new instance of the interface, This should be the only instance used. #I don’t know if this needs to go in its own module def initialize server, port = ‘5015’ @xmlmc = Xmlmc::Interface.new server, port end end module Xmlmc class API include […]

将实例变量初始化为数组 – Ruby

我正在尝试初始化和实例变量作为数组,如下所示: class Arch < ActiveRecord::Base attr_accessor :name1 def initialize @name1 = [] end def add_name1(t) @name1 << t end end 当我在控制台会话中尝试Arch.new时,我得到(Object不支持#inspect)。 这是怎么回事? 如何创建实例数组变量? 我试着像这样: class Arch < ActiveRecord::Base attr_accessor :name1 def after_initialize @name1 = [] end def add_name1(t) @name1 << t end end 而我的@ name1仍然是一个NilClass。 :/

实例变量inheritance

有人可以解释一个类如何访问其超类的实例变量以及它不是如何inheritance? 我在谈论’Ruby Programming Language’和示例 class Point def initialize(x,y) # Initialize method @x,@y = x, y # Sets initial values for instance variables end end class Point3D “(1, 2, 3)” 如果不inheritance,类Point3D如何访问to_s x和y ? 这本书说: “它们有时似乎是inheritance的原因是实例变量是由首先为它们赋值的方法创建的,而这些方法通常是inheritance或链接的。” 但我无法弄清楚它的真正含义。

如果使用<<,Ruby attr_reader允许修改字符串变量

陷入一些奇怪的行为,并想知道是否有其他人可以确认我所看到的。 假设您使用成员变量创建一个类,并允许使用attr_reader读取它。 class TestClass attr_reader :val def initialize(value) @val = value end end 现在当我执行以下操作时,它似乎修改了@val的值,即使我只授予它读取权限。 test = TestClass.new(‘hello’) puts test.val test.val << ' world' puts test.val 这回来了 hello hello world 这只是我在irb中进行的一些测试的结果,所以不确定是否总是如此