Ruby类名

[Ruby笔记]27. ::String 前加双冒号确保使用built-in Ruby class ::String# File : ex.rb class V class String attr_reader :picth def initialize(picth) @picth = picth + " From My String" puts @picth end end d 阅读详情

一、类名为什么是常量?

#当前类是Object
self.class
#=>Object
#添加一个类C
class C ; end
Object.constants.grep  /^C$/ 
#=>[:C]      
#这时在当前类Object中添加了常量 :C
#:所以类名是常量。


二、这里的类名常量C,为什么是所有作用域可见?

类名常量C添加在Object类中
Object是所有类的superclass(BasicObject除外),所以在所有类中都可见。

如果:

module M 
  class C; end
end
Object.constants.grep  /^M$/ 
#=>[:M]
Object.constants.grep  /^C$/ 
#=>[]
M.constants
#=>[:C]

#---------关于 Kernel#load 方法的实验----------
#person.rb
#class Person; end

class C
  class D
    def self.init
      load './person.rb'     
     end
     init              #load到Object,而不是C::D
  end
end
Object.constants.grep /^C$|^Person$/
#=>[:C,:Person]
Object.constants.grep /^D$/
#=>[]
C.constants
#=>[:D]



三、类名常量C和类C的关系

#类名常量C是指向(reference)类C的对象

class C
  def hi
    p 'hi, in class C'
  end
end
#变量cc
cc = C           
cc.name
#=>"C"
cc.new.hi
#=> 'hi, in class C'         

#改变常量C,(实验需要,平时不建议改变常量^_^)
C = "i'm string now"   #assign
#=>warning.....        
#C还是常量
Object.constants.grep  /^C$/
#=>[:C]  
C
#=>"i'm string now"
#指向了String类的对象。

#变量cc没变,指向类C
cc.name
#=>"C"
cc.new.hi        
#=> 'hi, in class C'

#D是常量
D = cc         
Object.constants.grep  /^C$|^D$/
#=>[:C,:D]
D.name
#=>"C"
#常量D指向类C

#打开类C,添加方法sing
class D       # D是指向类C的常量!!!
  def sing
    'singing'
  end
end
#常量D和变量cc共同指向C类
D.instance_methods(false)  
cc.instance_methods(false)
#=>[:hi,:sing] 

#通过变量cc,向类C 添加方法
cc.send(:define_method, :dance){"dance"}  
cc.instance_methods(false)
D.instance_methods(false)
#=>[:hi,:sing,:dance]



Ruby编程中类与对象的深入理解 本文深入探讨了Ruby编程语言中对象模型的核心概念,包括类与对象的关系、常量的作用域规则、命名空间的使用以及方法调用背后的机制。通过类比文件系统的方式,解释了常量如何通过路径进行唯一标识,以及模块如何被用作组织常量的容器,即命名空间。同时,文章还介绍了Ruby中方法查找和执行的过程,并通过实例讲解了如何解决类名冲突以及理解self在Ruby中的重要性。 阅读详情

相关推荐

JReleaser:Java跨平台发布工程化实践指南

Java应用发布长期面临多平台适配难题,传统脚本方式难以维护且易出错。JReleaser通过声明式YAML配置,统一管理构建产物到Windows MSI、macOS PKG、Linux DEB/RPM等分发包的生成与自动发布,支持GitHub、GitLab、SDKMAN!等主流渠道。其核心价值在于解耦构建与分发——不侵入Maven/Gradle编译流程,仅消费标准输出(如fat jar或GraalVM native二进制),并内置签名、校验、Release Note生成等工程化能力。适用于CLI工具、Jav

weixin_34337381的博客 294

Ruby之Class

类是对具有同样属性和同样行为的对象的抽象,Ruby中类的声明使用class关键字。定义类的语法如下,        classClassName            defmethod_name(variables)               #somecode            end        end 类的定义要在class…end之间,在上面的格式中,ClassNam

A梦先生的专栏 1107

YOLOv5实战:无人机巡检图片差异对比与违建标记(附完整代码)

本文详细介绍了如何利用YOLOv5目标检测技术实现无人机巡检图片差异对比与违建标记。通过图像对齐、目标检测、差异分析和可视化标记四个步骤,构建高效的违建识别系统,显著提升城市管理效率。文章包含完整代码实现和性能优化技巧,为计算机视觉在无人机巡检中的应用提供实用指南。

weixin_42535720的博客 280

Ruby代码片段:得到当前类名

在bigbold上看到Get the currently running method name in Ruby 代码片段: module Kernel private    def this_method_name      caller[0] =~ /`([^']*)'/ and $1    endendclass Foo def test_method   this_method_nam...

weixin_34387468的博客 242

谷歌浏览器崩溃排查:闪退、卡死、网页打不开的修复指南

浏览器多进程架构通过进程隔离、GPU加速和扩展沙箱提升网页渲染效率,但配置损坏、扩展冲突、显卡驱动异常或系统资源不足时,常会以闪退、卡死、白屏、内存占用飙升和能上微信却打不开网页等形式暴露。排查价值在于先分层定位系统、进程、配置扩展与网页内容,再用无痕模式、chrome://crashes、chrome://gpu和浏览器任务管理器收集证据,避免盲目重装。对办公、开发运维和日常维护场景,禁用扩展、关闭硬件加速、刷新DNS缓存、重置配置文件乃至干净重装,都是可复用的工程化处置手段。围绕谷歌浏览器崩溃的典型症状

weixin_34138056的博客 425

如何在OBS中添加实时时间戳:Lua脚本配置教程(附效果展示)

本文详细介绍了如何在OBS中通过Lua脚本配置实时时间戳功能,包括环境准备、脚本获取、安装配置及高级定制。适用于直播和视频录制场景,提供精准回溯和风格自定义,支持多平台适配和性能优化,是专业制作的必备技巧。

day7的博客 1044

Ruby 类定义

类定义     方式一:通过执行类代码体创建或扩展类Class的对象    ruby 代码 class [scope::] classname [<superexpr]        body      end        注意: 1、如果superexpr存在,那么该superexpr应当是一个以Class对象为结果的表达式,而且它将是被定义的类的超...

yjjxf 446

点云体素化算法研究-3.Voxelization 三维模型体素化

体素(voxel)即体积元素的简称,是数字数据在三维空间分割上的最小的单位。体素化就是通过创建三维体素网格来表示三维物体,是一种将无序点云变为有序点云的降采样的空间数据结构方法,便于实现点云的空间卷积。激光雷达(LiDAR)| Open3D:第五节 表面重建-体素化。

周陽讀書 2066

Ruby 类的属性、变量、常量和方法定义

 一、类属性声明     一个对象的外部可见部分被称其为属性。ruby通过对象的实例变量来表示对象的内部状态,即,属性。既然是对外部可见的。Ruby中,实例变量无法直接为对象外使用,只能通过对象定义的操作方法访问。同理,实例变量也不能变成public变量,同样是通过方法访问     那就是可以通过某种方式读取和修改的。Ruby中是通过定义方法来访问属性。有两种方法方式:     1、直接定义类属性...

yjjxf 1156

第11节:GPU 线程层级:线程、线程块、网格

层级标识变量功能线程threadIdx执行单元,处理数据线程块blockIdx管理多个线程,提供共享内存网格管理多个 blockGPU 编程中,合理安排线程层级,是提升性能的关键。

yumeiguo的博客 210

【大语言模型 14】Transformer权重初始化策略:从Xavier到GPT的参数初始化演进之路

权重初始化是深度学习训练成功的隐秘基石,特别是在Transformer这样的深层架构中,合适的初始化策略能够决定模型的训练稳定性和收敛速度。本文从经典的Xavier和He初始化出发,深入解析Transformer特有的初始化策略,通过数学推导、代码实现和实验分析,揭示不同初始化方法对大语言模型训练的深层影响。我们将探讨为什么GPT系列模型采用特定的初始化方案,以及如何针对不同层设计最优的初始化策略。

熵数实验室 1686

ruby类名之间<,<=方法

有时候看源码的时候看到类名之间存在<.<=操作,顿时一头雾水,类名之间也可以比较吗?查了下api,豁然开朗 Class的父类是Module,Module.methods.grep(/</) 会得到匹配的结果集:[:<=>,:<,:<=] e.g mod < other → true, false, or nil Returns...

weixin_30895603的博客 133

使用CloudCompare和CANUPO进行点云分类的编程指南

在本文中,我们将介绍如何使用CloudCompare和CANUPO库进行点云分类的编程。CloudCompare是一款功能强大的开源点云处理软件,而CANUPO是一个用于点云分类和分割的C++库。这只是一个简单的点云分类示例,CANUPO库还提供了其他更高级的功能和算法,以满足各种点云分类需求。该函数接受点云数据、地面点掩码和非地面点掩码作为输入,并将分类结果存储在这两个掩码向量中。完成安装后,我们可以开始编写点云分类的代码。最后,我们遍历点云数据,并根据地面点和非地面点的掩码将结果打印出来。

ByteWhisper的博客 1058

Mac制作可引导安装器:APFS卷宗与签名验证原理

可引导安装器是macOS系统重装与部署的基础技术,其核心依赖APFS文件系统的多卷宗架构与Apple启动签名验证机制。APFS将Preboot、Recovery、Base System等逻辑卷宗封装于同一容器中,要求严格匹配的元数据结构与代码签名;而createinstallmedia命令正是通过asr、diskutil、bless等底层工具协同完成卷宗创建、镜像写入与EFI配置。该过程无法被简单复制替代,否则将因缺失com.apple.recovery.boot签名或Preboot卷宗绑定失败导致‘未能创

weixin_33976072的博客 362

芯片ATE测试PAT(Part Average Testing)学习总结-20250916

文章摘要:零件平均测试(PAT)是半导体制造中基于统计学的质量控制方法,分为静态和动态两种类型。静态PAT通过预先设定的固定限值(每6-8批次更新)筛选异常芯片,计算采用稳健平均值和四分位间距。动态PAT则根据实时数据调整限值,能更精确识别异常而不误判合格芯片。两种方法均采用"均值±6倍标准差"的计算公式,但动态PAT具有更好的适应性和准确性。该方法通过统计分析提高了芯片产品的质量和可靠性。

歌颂苦难的行为是无耻的; 1190

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ruby class/module name must be CONSTANT 错误

Ruby 错误提示: class/module name must be CONSTANT =beginbegintocomment thisisalsocomment=endputs"noLonggerComments";#rdocrules#=headers#thisisheadercontent#==subheaders#thisissub...

weixin_30679823的博客 429

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

ruby 反射机制常用方法

1. 获取类的名称: .class 2. 获取超类的名称:.superclass 3. 获取类包含的模块:.class.included_modules 4. 检查是否为实例对象:.instance_of? 5. 呈现对象关系:.class.ancestors(返回类和模块名称) 6. 返回变量及常量:.instance_variables.sort  .constants.sort  ...

weixin_33795806的博客 156

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

ruby如何查找一个方法属于哪个类

这是一个看似简单,实际不那么直接的问题。一种方法是先直接看当前对象的类是神马东东: puts self.class 或者 self.class.name 不过在某些情况下上述代码返回不了具体的名称,前者返回一个后者返回nil;这是咋回事呢?原因是你在元类或称为单例类中,比如下面的情况: class A; end a=A.new class   puts a #like self.cla

享受开发,颠倒银河 2677

ruby的命名规范

Ruby的标识名用来指向常量,变量,方法,类和模块。标识名的首字符用来 帮助我们确定标识所指向内容的作用域。一些标识名,就是上面所示的关键字,不 能用来当作常量,变量,方法,类或模块的名字。 Ruby的标识名区分大小写。 Ruby使用一个约定来帮助它区别一个名字的用法: 名字前面的第一个字符表明这个名字的用法。 局部变量、方法参数和方法名称应该用一个小写字母开头或者用一个下划线开头;

octopus的专栏 4173

Ruby日文手册翻译1

Ruby的字句构造: 1:变量2:注释3:嵌入文档4:保留字 Ruby目前的实现使用的是ASCII字符集。能够识别大写和小写字母。除了变量和一部分直接量的中间,可以在任意地方加入空格和注释,空格、制表符、垂直制表符、backspace、回车符、换行符、换页符。当代码换行继续写的时候,除了空格,其它一律解释为单独语句。(译者注:即在代码写的太长,想换行时中间只能加空格,否则会出错) <1...

weixin_34199335的博客 320

ruby学习笔记(3)

1) sleep方法。 ruby中也有定时器,sleep相当于js中的setTimeout函数,不同的是sleep后的参数单位是秒,不是微秒。另外,js中的setTimeout是另起一个线程,不停止主线程继承往下执行,和ajax类似,ruby的sleep方法却是会阻止当前线程往下执行的。2)ruby的函数中return是可以省略的,如果省略,方法中的最后一个语句的计算值会是返回值。=======...

weixin_30316097的博客 450

Ruby 程序的命名规则

      Ruby标示符由字母、数字下划线组成,但是不能以数字开头,并且标识符,不能包含任何非打印字符。      以A到Z的大写字母开头的标识符是常量,如过尝试改变这样标识符的值,Ruby解释器将发出警告。      类名和模块名必须以大写字母开头,否则会报错。      按照习惯,非常量的多字节和标识符以下划线分割多个字符,如:“hello_word”而多字节的常量则以“HelloWorld”或"HELLO_WORLD"的形式标示。

Java and Ruby 665

Ruby中实现把字符串转换为类的2种方法

有一个字符串 “ChinaMag”,根据这个字符串调用 类 ChinaMag下的方法。 1.rails可以使用 constantize方法。pry(main)> 'ChinaMag'.constantize => ChinaMag pry(main)> "Test::Unit".constantize => Test::Unit2.ruby可以使用 Object.const_get(“String

hxker的专栏 1567

ruby:借助第三方类名如何查找第三方gem名称(zlib为例)

rubygem中含有成千

享受开发,颠倒银河 2505
上一篇: require 和 load
下一篇: 应该使用32位还是64位JVM
weeweee
博客等级 码龄16年 10粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值