ruby 类别问题
PHP中文网
PHP中文网 2017-04-22 08:59:38
[Ruby讨论组]

class 的问题 (不好意思,我的理解能力很差)

  1. instance method, variable
  2. class method, variable

我已经阅读其他ruby书籍,还是不懂它区别在哪。
一样是方法和变量,这2个的差别或用意在那里?

还有最后一个问题是self
self是什么?

希望各位大大,能帮我解决这些问题,希望能举几个简单简明的例子^^
谢谢^^

PHP中文网
PHP中文网

认证0级讲师

全部回复(2)
PHP中文网

我试着贴个代码解释下吧,lz如果不懂就到评论里追问我吧。

#!/usr/bin/env ruby
# encoding: UTF-8

class Trivia
  @@x = 10

  def instance_scope_x
    @x
  end

  def instance_scope_x=(x)
    @x = x
  end

  def self.class_scope_x
    @@x
  end

  def self.class_scope_x=(x)
    @@x = x
  end
end

a = Trivia.new
# 只有Trivia对象才能使用class方法。所以这里用a.class返回Trivia对象
p "The class scope x in a : #{a.class.class_scope_x}"
a.instance_scope_x = 20
p "The instance scope x in a : #{a.instance_scope_x}"

b = Trivia.new
# Trivia的实例修改自身的值,不会影响同个类的其他实例
p "The instance scope x in b : #{b.instance_scope_x}"
p "The class scope x in b : #{b.class.class_scope_x}"
b.class.class_scope_x = 30
# 修改了Trivia类的值。因为a和b共享同一个类对象(都指向Trivia),所以现在值改变了
p "Now the class scope x in a : #{a.class.class_scope_x}"

# self指向当前作用域的所有者
class Trivia
  # 类作用域
  p self

  def self_scope_x
    # 实例作用域
    p self
    # 这里self指向实例作用域
    self.instance_scope_x
  end

  def self.self_scope_x
    # 这里self指向类作用域
    self.class_scope_x
  end
end

p "The self_scope_x in Trivia: #{Trivia.self_scope_x}" # 调用的是class_scope_x
p "The self_scope_x in Trivia's instance: #{a.self_scope_x}" # 调用的是instance_scope_x
阿神

我会在文章里讲解这些问题,欢迎关注

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号