ruby 类别问题

 大眼仔陈先森 发布于 2022-10-25 01:10

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

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

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

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

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

2 个回答
  • 我会在文章里讲解这些问题,欢迎关注

    2022-10-26 01:44 回答
  • 我试着贴个代码解释下吧,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
    
    2022-10-26 01:46 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有