当前位置: 首页 > wzjs >正文

乐陵市住房和城乡建设局网站typecho对比wordpress

乐陵市住房和城乡建设局网站,typecho对比wordpress,mvc5网站开发用户注册,网站建设win2012在 Ruby 中,self 是一个指向当前对象的特殊变量,它的值根据代码的上下文动态变化。理解 self 的指向是掌握 Ruby 面向对象编程的关键。以下是详细解析: 一、self 的核心规则 self 始终指向当前方法的执行者(即调用方法的对象&…

在 Ruby 中,self 是一个指向当前对象的特殊变量,它的值根据代码的上下文动态变化。理解 self 的指向是掌握 Ruby 面向对象编程的关键。以下是详细解析:


一、self 的核心规则

  1. self 始终指向当前方法的执行者(即调用方法的对象)。
  2. self 的指向在代码运行时动态确定,而非定义时。

二、不同上下文中的 self

1. 顶层作用域(Top Level)
  • 在 Ruby 文件或 irb 会话的最外层,self 指向 main 对象(属于 Object 类)。
puts self  # => main
puts self.class  # => Object
2. 类/模块定义中
  • 在类或模块的 定义体内self 指向该类或模块自身。
class MyClassputs self  # => MyClass
endmodule MyModuleputs self  # => MyModule
end
3. 实例方法中
  • 在实例方法内部,self 指向调用该方法的 对象实例
class Userdef whoamiself  # 返回当前实例end
enduser = User.new
puts user.whoami == user  # => true
4. 类方法中
  • 在类方法内部,self 指向 类本身
class Userdef self.createself  # 返回 User 类end
endputs User.create == User  # => true
5. 单例类(Singleton Class)中
  • 在单例类定义中,self 指向对象的单例类。
obj = Object.new
singleton_class = class << objself  # 指向 obj 的单例类
end
puts singleton_class  # => #<Class:#<Object:0x00007f...>>

三、self 的常见用途

1. 显式调用方法
  • 区分局部变量和方法名:
    class Productattr_accessor :pricedef price_display"Price: #{self.price}"  # self.price 调用方法,而非局部变量end
    end
    
2. 定义类方法
  • 使用 self. 前缀定义类方法:
    class Loggerdef self.log(message)puts "[INFO] #{message}"end
    endLogger.log("System started")  # 调用类方法
    
3. 链式方法调用
  • 返回 self 以实现链式调用:
    class Calculatordef add(n)@result ||= 0@result += nself  # 返回当前实例enddef multiply(n)@result *= nselfend
    endcalc = Calculator.new
    calc.add(5).multiply(2).add(3)  # 链式调用
    
4. 模块混入中的 self
  • 在模块中使用 self 定义方法时,这些方法会成为类的实例方法:
    module Greetabledef greet"Hello, #{self.name}"  # 假设存在 name 方法end
    endclass Personinclude Greetableattr_accessor :name
    endperson = Person.new
    person.name = "Alice"
    puts person.greet  # => "Hello, Alice"
    

四、self 的特殊场景

1. 运算符重载
  • 在运算符方法中,self 指向左操作数:
    class Vectorattr_reader :x, :ydef initialize(x, y)@x = x@y = yenddef +(other)Vector.new(x + other.x, y + other.y)end
    endv1 = Vector.new(1, 2)
    v2 = Vector.new(3, 4)
    v3 = v1 + v2  # self 是 v1,other 是 v2
    
2. class << self 语法
  • 打开类的单例类,定义类方法:
    class Databaseclass << self  # self 是 Database 类def connect"Connecting..."endend
    endputs Database.connect  # => "Connecting..."
    

五、self 的注意事项

  1. 避免冗余使用
    当无歧义时,可省略 self

    class Userattr_accessor :namedef initialize(name)self.name = name  # 必须用 self. 调用 setter# 等同于 @name = name(如果直接操作实例变量)end
    end
    
  2. selfsuper 的关系
    super 会调用父类方法,但 self 仍指向当前对象:

    class Parentdef show"Parent: #{self.class}"end
    endclass Child < Parentdef showsuper  # 调用 Parent#show,但 self 仍是 Child 实例end
    endputs Child.new.show  # => "Parent: Child"
    
  3. 块内的 self
    块内部的 self 继承自定义块时的上下文:

    class Demodef test[1].each { puts self }  # self 是 Demo 实例end
    endDemo.new.test  # => #<Demo:0x00007f...>
    

六、总结表:self 的指向

上下文self 指向
顶层作用域main 对象(Object 实例)
类/模块定义体类或模块自身
实例方法内对象实例
类方法内类本身
单例类定义中单例类对象
块内部定义块时的上下文对象(通常为外层 self

掌握 self 的指向能帮助你更精确地控制对象的行为,编写出符合预期的 Ruby 代码!

— END —


文章转载自:

http://sRcmxoLb.jhrtq.cn
http://Zocz9Ory.jhrtq.cn
http://KF7S4w2V.jhrtq.cn
http://7jv2muKG.jhrtq.cn
http://7zFB5AyI.jhrtq.cn
http://85KaUS2a.jhrtq.cn
http://z9hr18mR.jhrtq.cn
http://UaAWqY6K.jhrtq.cn
http://TUu9LiFx.jhrtq.cn
http://9xrrxA0a.jhrtq.cn
http://GqNtLPcv.jhrtq.cn
http://HQE7qotT.jhrtq.cn
http://hExgFXUu.jhrtq.cn
http://Zve5dj0b.jhrtq.cn
http://lpEtPaNt.jhrtq.cn
http://p6Zs9qF8.jhrtq.cn
http://of7FJ4v8.jhrtq.cn
http://VBMWNj25.jhrtq.cn
http://23FwMcFv.jhrtq.cn
http://Lw0GPFfF.jhrtq.cn
http://IhREBXj2.jhrtq.cn
http://GYrELfNw.jhrtq.cn
http://TpGIp6Fy.jhrtq.cn
http://w26AKDTm.jhrtq.cn
http://E2cshG8J.jhrtq.cn
http://SLYEGWIQ.jhrtq.cn
http://DRuCQ8bp.jhrtq.cn
http://mCtB90xr.jhrtq.cn
http://RCKDpzXT.jhrtq.cn
http://L4hNTkyM.jhrtq.cn
http://www.dtcms.com/wzjs/637500.html

相关文章:

  • 公司做竞拍网站的收入怎么报税用模板做网站需要懂代码吗
  • 客户网站开发全流程南昌房产网
  • 宁波网站建设制作推广优化网站服务
  • 天津市建设安全协会网站网店运营推广1+x证书查询
  • 企业网站如何去做优化英语字体设计网站好
  • 展示型网站搭建wordpress搬家文章
  • WordPress下拉下一页企业营销型网站seo推广
  • 开公司先建设网站外国网站欣赏
  • linux 搭建网站服务器ai海报设计
  • 湖北网站建设制作网站备案成功后该怎么做
  • 网站字体大小选择wordpress博客重装
  • 开发网站的流程广州联享品牌网站建设
  • 宽城区网站建设wordpress文章标题字体
  • 怎样建网站视频教程手把手教建设网站
  • 家居网站建设定位分析论文wordpress永久链接设置的六大技巧
  • 建网站需要多少钱2017wordpress登陆界面背景
  • 地下城钓鱼网站怎么做织梦做旅游网站
  • 德邦物流公司现代物流网站建设与开发标书制作代做公司
  • 网站开发计什么科目wordpress客户使用的后端
  • 做网站时链接的网页无法显示搭建网站需要学什么软件
  • 网站被做301跳转了怎么办新版wordpress没有关键词
  • 一个人制作网站智慧团建网站登录平台pc端
  • 银川网站建设0951手机app下载网
  • 备案个人网站名称wap网站软件
  • 建立自己的网站步骤网站 平均加载时间
  • 设计logo网站免费国外如何在各大网站发布信息
  • 三五互联网站建设怎么样莱芜吧莱芜贴吧
  • 工商局网站做年报制作网站首先做的是
  • 网站推广软件工具设计房子装修效果图软件
  • 海口建设局网站h5网站建设代理