相关疑难解决方法(0)

类和模块之间的区别

我来自Java,现在我正在使用Ruby.

我不熟悉的一个语言功能是module.我想知道究竟是module什么,你什么时候使用一个,为什么要用module一个class

ruby module class

426
推荐指数
7
解决办法
14万
查看次数

@@ variable在Ruby中意味着什么?

什么是Ruby变量,在符号(@@)前面加上double ?我对一个带有at符号的变量的理解是它是一个实例变量,在PHP中是这样的:

PHP版本

class Person {

    public $name;

    public function setName($name) {
        $this->name = $name;
    }

    public function getName() {
        return $this->name;
    }
}
Run Code Online (Sandbox Code Playgroud)

Ruby相当于

class Person

    def set_name(name)
        @name = name
    end

    def get_name()
        @name
    end
end
Run Code Online (Sandbox Code Playgroud)

双重标志@@是什么意思,它与单个标志有什么不同?

ruby syntax instance-variables class-variables

153
推荐指数
3
解决办法
9万
查看次数

如何在Ruby中初始化模块的实例变量?

我有一些模块,我想在其中使用实例变量.我目前正在初始化它们:

module MyModule
  def self.method_a(param)
    @var ||= 0
    # other logic goes here
  end
end
Run Code Online (Sandbox Code Playgroud)

我也可以调用init方法来初始化它们:

def init
  @var = 0
end
Run Code Online (Sandbox Code Playgroud)

但这意味着我必须记住要经常打电话给它.

有没有更好的方法呢?

ruby module instance-variables

77
推荐指数
2
解决办法
7万
查看次数

模块中@和@@有什么区别?

假设包含模块而不是扩展模块,模块实例变量和类变量之间有什么区别?

我认为两者之间没有任何区别.

module M
  @foo = 1
  def self.foo
    @foo
  end
end
p M.foo

module M
  @@foo = 1
  def self.foo
    @@foo
  end
end
p M.foo
Run Code Online (Sandbox Code Playgroud)

我一直在模块中使用@ as @@,我最近看到其他代码在模块中使用@@.然后我以为我可能错误地使用它.

由于我们无法实例化模块,因此模块的@和@@之间必须没有区别.我错了吗?

-----------------------添加以下内容--------------------

为了回答有关评论和帖子的一些问题,我还测试了以下内容.

module M
  @foo = 1
  def self.bar
    :bar
  end

  def baz
    :baz
  end
end

class C
  include M
end

p [:M_instance_variabies, M.instance_variables] # [@foo]
p [:M_bar, M.bar] # :bar

c = C.new
p c.instance_variables
p [:c_instance_variabies, c.instance_variables] # []
p [:c_baz, c.baz] :baz
p [:c_bar, c.bar] # undefined …
Run Code Online (Sandbox Code Playgroud)

ruby

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