相关疑难解决方法(0)

什么是Ruby中的attr_accessor?

attr_accessor在Ruby中很难理解.谁可以给我解释一下这个?

ruby

990
推荐指数
13
解决办法
45万
查看次数

Ruby:布尔属性命名约定和使用

学习红宝石.我的印象是布尔属性应该如下命名:

my_boolean_attribute?
Run Code Online (Sandbox Code Playgroud)

但是,尝试执行以下操作时出现语法错误:

class MyClass
  attr_accessor :my_boolean_attribute?

  def initialize
    :my_boolean_attribute? = false
  end
end
Run Code Online (Sandbox Code Playgroud)

红宝石显然很讨厌"?".这是惯例吗?我究竟做错了什么?

ruby attributes conventions boolean-expression

32
推荐指数
4
解决办法
2万
查看次数

为什么Ruby中的符号不​​被认为是一种变量?

编程和Ruby的新手,我希望关于符号的这个问题符合要求.据我所知,在红宝石的符号(如:book,:price)是特别有用的哈希键,以及全能做的是字符串可以做的事情一个轻量级的,特定子集.

但是,我在一方面对符号感到困惑.具体来说,当它们在attr_accessor方法类型中使用时,它们看起来更像是一个变量.例如,attr_reader :book, :price.

如果它们是该用法中的变量,那么这有点令人费解,因为它们通常不在变量类型中列出(如$ global,@ instance,local,@@ class,有时候,CONSTANT,变量类型)变量类型被描述.

如果符号是以这种方式使用的变量,那么应该对它们有什么范围?或者它们在这种情况下仍然是某种轻量级的字符串?(或者也许以更广泛的方式,符号,字符串和变量都具有基本的鸭子性质?)提前感谢您的见解和建议.

ruby variables symbols accessor

11
推荐指数
3
解决办法
1072
查看次数

Ruby:我应该如何访问类中的实例变量?

@var_name在 ruby​​ 中,您可以直接通过或通过 private getters在内部访问变量attr_reader :var_name

哪种解决方案更(语义上?)正确?使用解决方案 1 或解决方案 2 有什么优点/缺点?

解决方案一:

class Point
 def initialize(x, y)
   @x = x
   @y = y
 end

 def distance
   Math.sqrt(@x ** 2 + @y ** 2)
 end
end
Run Code Online (Sandbox Code Playgroud)

解决方案2:

class Point
  def initialize(x, y)
   @x = x
   @y = y
  end

  def distance
    Math.sqrt(x ** 2 + y ** 2)
  end

private 
  attr_reader :x, :y

end
Run Code Online (Sandbox Code Playgroud)

ruby oop design-patterns class object

7
推荐指数
1
解决办法
3546
查看次数

如何使用instance_variable_set正确设置实例变量?

我正在查看instance_variable_set的文档,并看到给出的示例代码执行此操作:

obj.instance_variable_set(:@instnc_var, "value for the instance variable")
Run Code Online (Sandbox Code Playgroud)

然后允许您在任何类的实例方法中以@instnc_var访问变量.

我不知道为什么需要有一个冒号:前的@instnc_var.结肠做什么?

ruby ruby-on-rails

5
推荐指数
1
解决办法
9079
查看次数

Ruby类中“属性”的本质是什么?

在以下示例中,我不了解attr_reader或这样的关键字property

class Voiture 
  attr_reader :name
  attr_writer :name
  property :id, Serial
  property :name, String
  property :completed_at, DateTime
end
Run Code Online (Sandbox Code Playgroud)

它们如何工作?如何创建自己的?它们是功能,方法吗?

class MyClass 
    mymagickstuff :hello
end
Run Code Online (Sandbox Code Playgroud)

ruby properties class

5
推荐指数
1
解决办法
4238
查看次数

用"="结尾的ruby方法是什么意思?

以"="结尾的ruby方法是什么意思?

请参阅此打印输出中的可用方法:

 2.2.0 :066 > obj.methods(false)
 => [:label=, :label, :description=, :description, :thumbnail=, :thumbnail, :attribution=, :attribution, :license=, :license, :logo=, :logo, :see_also=, :seeAlso=, :see_also, :seeAlso, :related=, :related, :within=, :within, :metadata=, :metadata, :sequences=, :sequences, :structures=, :structures, :viewing_hint=, :viewingHint=, :viewing_hint, :viewingHint, :viewing_direction=, :viewingDirection=, :viewing_direction, :viewingDirection, :service=, :service] 
Run Code Online (Sandbox Code Playgroud)

例如,label =和label之间的区别是什么?

ruby

2
推荐指数
1
解决办法
369
查看次数

在Ruby中创建Person类

我已经创建了一个Person类,我的代码是正确的,但我只是想让某人澄清一个特定的行.

class Person 
  attr_reader :first_name, :last_name, :age

  def initialize (first_name, last_name, age)  
    @first_name = first_name  
    @last_name = last_name
    @age = age
  end
end
Run Code Online (Sandbox Code Playgroud)

我很困惑的是那条线attr_reader.为什么需要包含这个,为什么我需要:在每个属性之前?

ruby

1
推荐指数
1
解决办法
250
查看次数