Ruby 学习(十)类class

[ruby]class、module、include、prepend、extend、 require、load、gem 1. class 定义实例方法时,与module想比,一般定义calss就行,有时需要区分名称的时候可以用module的命名空间功能 2. module 定义只有类方法的数据类型时,倾向使用模块而不是类。只有当需要实例化时才使用类 # 差 class SomeClass def self.some_method # 省略主体 end def self.some_other_method # 省略主体 end end # 好 module SomeModule 阅读详情

类

定义

class 类名称
end

创建对象

new

自定义初始化构造器

class Box
  def initialize(w, h)
    @width = w
    @height = h
  end
end

obj = Box.new(100 ,200)

变量

局部变量

  • 局部变量是在方法中定义的变量。
  • 局部变量在方法外是不可用的。
  • 局部变量以小写字母或 _ 开始。

实例变量 @

  • 实例变量在变量名之前放置符号@。
  • 未初始化的实例变量的值为 ni
class Person
    def initialize(name, height)
        @person_name = name
        @person_height = height
    end

    def show_detail
        puts "person_name : #@person_name"
        puts "person_height : #@person_height"
    end
    
end

per1 = Person.new("jack", 100)
per1.show_detail

类变量 @@

  • 类变量属于类,且是类的一个属性。
  • 类变量在变量名之前放置符号@@。
  • 类变量不能跨类使用
  • 且必须初始化后才能在方法定义中使用。引用一个未初始化的类变量会产生错误。
  • 类变量在定义它的类或模块的子类或子模块中可共享使用。
class Person
    @@total_person=100
    def initialize(name, height)
        @person_name = name
        @person_height = height
    end

    def show_detail
        puts "person_name : #@person_name"
        puts "person_height : #@person_height"
    end
    
    def show_total
        puts "total_person : #@@total_person"
    end
end

per1 = Person.new("jack", 100)
per1.show_total 

全局变量 $

  • 可以跨类使用的变量,您需要定义全局变量。
  • 全局变量总是以美元符号 $开始。
  • 未初始化的全局变量的值为 nil
$global_var = 100

print $global_var 
# 输出 100

常量 大写字母开头:Constant

class Person
    VAR1 = 100
    VAR2 = 200
    def show
        puts "第一个常量的值为 #{VAR1}"
        puts "第二个常量的值为 #{VAR2}"
    end
end

per1 = Person.new
per1.show 

输出

第一个常量的值为 100
第二个常量的值为 200

伪变量

它们是特殊的变量,有着局部变量的外观,但行为却像常量。
不能给这些变量赋任何值。

  • self: 当前方法的接收器对象。
  • true: 代表 true 的值。
  • false: 代表 false 的值。
  • nil: 代表 undefined 的值。
  • __FILE__: 当前源文件的名称。
  • __LINE__: 当前行在源文件中的编号。

函数/方法 def

  • 方法名应以小写字母开头。
  • 如果以大写字母作为方法名的开头,Ruby 可能会把它当作常量,从而导致不正确地解析调用。
  • 方法应在调用之前定义,否则 Ruby 会产生未定义的方法调用异常。

定义

   def 方法名称
      statement 1
      statement 2
   end

例子

class Person
    def hello
        puts "Hello Ruby!"
    end
end

obj = Person.new
obj.hello

# 输出 Hello Ruby!

定义

完整的

def method_name [( [arg [= default]]...[, * arg [, &expr ]])]
   expr..
end

没有参数的方法
调用:直接使用方法名称 method_name

def method_name 
   expr..
end

有参数的方法
调用:方法名称加上参数 method_name 25, 30

def method_name (var1, var2)
   expr..
end

给参数设定默认值

def method_name (var1=value1, var2=value2)
   expr..
end

返回值

  • 可以返回一个参数,
  • 也可以返回多个参数,用数组存放返回值
def test
   i = 100
   j = 200
   k = 300
return i, j, k
end
var = test
puts var

输出

100
200
300

类方法

类方法的声明和访问

   def 类名称.方法名称
      puts "return_date ===="
   end
  • 例子
class Accounts
   def reading_charge
      puts "reading_charge ===="
   end
   def Accounts.return_date
      puts "return_date ===="
   end
end

obj = Accounts.new

obj.reading_charge 
Accounts.return_date

输出

reading_charge ====
return_date ====

getter 和 setter

class Person
  # 初始化构造器
  def initialize(name, height)
    @person_name = name
    @person_height = height
  end

  # getter 方法
  def get_name
    @person_name
  end

  # setter 方法
  def set_name=(value)
    @person_name = value
  end

  # 定义方法
  def show_detail
    puts "person_name : #{@person_name}"
    puts "person_height : #{@person_height}"
  end
end

obj = Person.new("jack", 100)
puts obj.get_name
obj.set_name = "new name"
puts obj.get_name
jack
new name

to_s 方法

对象的字符串表示

没有重写to_s

#<Person:0x00007fdf450faf88>

重写to_s

class Person
  # 初始化构造器
  def initialize(name, height)
    @person_name = name
    @person_height = height
  end

  def to_s
    "#{@person_name} #{@person_height}"
  end
end

obj = Person.new("jack", 100)
puts obj.to_s
jack 100

访问控制

  • Public: Public 方法可被任意对象调用。
    • 默认情况下:
      • 方法都是 public 的,
      • 除了 initialize 方法总是 private 的。
  • Private: Private 方法不能从类外部访问或查看。只有类方法可以访问私有成员。
  • Protected: Protected 方法只能被类及其子类的对象调用。访问也只能在类及其子类内部进行。

类的继承

格式

class 子类 < 父类
  
end
Ruby编程:类与实例变量的深入理解 本文深入探讨了Ruby中类定义的机制,包括如何通过self引用当前对象,以及如何在不同情况下追踪当前类。特别关注了class_eval方法,它允许在已存在的类上动态地定义方法。此外,本文还介绍了类实例变量的概念,区分了普通实例变量与类变量,并探讨了它们在Ruby中的行为差异。最后,通过一个实际案例展示了如何使用单例方法来改进代码设计。 阅读详情

相关推荐

科研绘图实战:用Adobe Illustrator高效排版期刊论文图片

本文详细介绍了使用Adobe Illustrator高效排版科研论文图片的完整工作流。针对期刊投稿常见的图片格式问题,文章重点讲解了矢量图与位图的预处理、AI中的精准对齐与分布技巧、文字样式统一管理以及最终输出TIFF/PDF等符合出版要求的格式。掌握这套方法能确保图片满足高分辨率、规范字体和精确尺寸等期刊硬性标准,显著提升投稿效率。

tomato的博客 1428

Ruby之Class

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

A梦先生的专栏 1107

新手避坑指南:在MacBook上为PyTorch正确配置MPS环境,跑通第一个YOLOv8训练

本文详细指导新手如何在MacBook上为PyTorch正确配置MPS环境,并成功运行YOLOv8训练。从环境准备、PyTorch安装到YOLOv8配置和性能调优,提供全面的避坑指南和实用技巧,帮助开发者充分利用Mac的GPU加速能力。

weixin_29100399的博客 228

Ruby学习之类中变量的定义和使用

上篇文章呢,我们简单看了下类和方法以及对象的定义和使用,并且简单的了解了类中的变量的几种类型,这次我们就来简单的看一下。 Ruby变量的官方定义就是持有可被任何程序使用的任何数据的存储位置,它有五种类型: 一般小写字母、下划线开头:变量(Variable)。 $开头:全局变量(Global variable)。 @开头:实例变量(Instance variable)。 @@开头:类变量(...

luyaran的博客 1486

【论文精读】Latent Diffusion

Latent Diffusion

weixin_44934783的博客 4476

UART中断接收的实战陷阱:HAL库常见误区与性能调优指南

本文深入解析STM32 HAL库UART中断接收机制,揭示常见实战陷阱如数据溢出、中断优先级配置不当等,并提供性能调优方案。重点介绍如何使用空闲中断处理不定长数据、DMA与中断混合模式优化,以及工业级错误恢复与流量控制策略,帮助开发者构建稳定可靠的串口通信系统。

pea55的博客 747

对 ruby 中的class 理解

ruby 中所有的东西都是对象,包括一些基础的Object,Class, Module。 可以把ruby中的类和实例都统一的理解为实例。像Class这样的特殊的实例,因为有new方法,所以可以产 生新的实例。 既然所有的东西都是实例,那对于新实例的产生和新类的产生是如何工作的? instance中的方法和变量分为2部分,一部分叫object 方法,一部分叫instance 方法, 变量...

liano 的专栏 749

Linux内核同步原语之队列自旋锁(Queued Spin Lock)深度解析

本文深度解析了Linux内核中的队列自旋锁(Queued Spin Lock)机制。通过对比传统自旋锁的瓶颈,详细阐述了队列自旋锁如何利用紧凑的4字节结构、每CPU节点数组和pending位优化,有效解决多核(SMP)系统中的缓存行乒乓和惊群效应,实现公平、高效的锁等待队列,从而显著提升内核在高并发场景下的可扩展性与性能。

weixin_29205061的博客 303

关于ruby class的一些概念

1、类的实例变量以@开头,类变量以@@开头,都是封装在类内部,无法直接访问 class Test def initialize(name) @name = name end end t = Test.new t.name # => 无法直接访问 为了可以读取、修改@name,可以自己写方法 class Test def initialize(na

redvoilin的专栏 3449

动态数据脱敏技术分析

在当前国内信息安全热潮中,数据脱敏作为数据安全的重要一环得到了业界的认可与重视。早在2012年,数据脱敏首次作为一个单独的魔力象限由Gartner发布,Gartner在2014年又提出了:按照数据使用场景,将数据脱敏分为静态数据脱敏(Static data masking-SDM )与动态数据脱敏(Dynamic data masking-DDM )。 可能有人望文生义,认为动态数据脱敏一定比静态数据脱敏高级。非也非也,静态or动态,取决于脱敏的使用场景,主要是以使用场景为由来选择合适的数据脱敏的模式。 本

美创科技的博客 4667

GNSS-RTK/INS紧组合里,那个‘杆臂改正’到底怎么算?一个公式讲清INS与天线位置的关系

本文深入解析GNSS-RTK/INS紧组合导航系统中的杆臂改正(Lever Arm Correction)原理与实现方法。详细介绍了杆臂效应的物理本质、数学建模及误差扰动分析,揭示了IMU与GNSS天线位置关系的核心公式,并提供了工程实现中的常见误区与验证方法。通过Python代码示例和紧组合量测模型处理流程,帮助开发者准确理解并应用这一关键技术。

weixin_33137081的博客 356

Ruby学习之深入类

在讨论对象模型时,对类做了初步了解,关于类本身,还有许多知识需要学习。 类定义 Ruby中,可以用class关键字或者Class.new方法来定义一个类,在Ruby中,类定义的同时就是在运行代码,类和方法、块一样,会返回最后一条语句的值,由于类也是一个对象(Class的实例),所以在类定义操作时,类本身就会充当self: result = class MyClass puts se...

183

打开电脑自动弹窗问题:无法为文件‘D:\Config.Msi\*.rbf‘设置文件安全。错误:5。请确认...如何解决?| 提供多种解决方案,亲测有效!

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 2910

ruby 类 继承_Ruby类

ruby 类 继承 Ruby类 (Ruby Classes) Ruby is a pure Object Oriented Programming Language. An object-oriented program consists of Classes and Objects. An object is an entity that serves as a container for d...

cunfen6312的博客 417

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Ruby 类和对象

本文详细介绍了 Ruby 中的类和对象基础,包括定义类、实例化对象、实例变量和方法、访问器、类变量和方法、继承机制以及模块应用。特别针对中文处理提供了注意事项,如编码声明、中文字符串操作和文件存储等。文章基于 Ruby 3.4.x 版本,适合初学者理解 Ruby 面向对象编程的核心概念,同时涵盖中文环境下的常见问题和解决方案。通过示例代码展示了创建类、定义方法、继承和多态等关键特性,帮助开发者掌握 Ruby 的面向对象编程范式。

m0_57545130的博客 769

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

《Ruby元编程》之Open Class

例如,在下面代码中: def to_alphanumeric(s) s.gsub /[^\w\s], '' end 很显然,在上面代码中,to_alphanumberic这个方法不符合面向对象的思想,也不符合ruby的一切皆对象的思想。 更好的方法是这个方法应该在字符串本身来提高,而不是Helper和Utils类。 然后在String类添加这个方法,很简单:

Java的专栏 1828

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ruby 变量类中范围_Ruby中的类

ruby 变量类中范围 Ruby类 (Ruby Classes) In the actual world, we have many objects which belong to the same category. For instance, I am working on my laptop and this laptop is one of those laptops which exis...

cumt951045的博客 245

Ruby元编程-学习笔记(四)-类定义

类定义 在类或模块定义时,其自身充当了当前对象self的角色,类和模块也都是对象,与方法和块相同,类定义也会返回最后一条语句的值. class MyClass puts "Hello" end=> Hello当前类 尽管self可以获得当前对象,但并不能获得当前类,每当通过class关键字打开一个类时,这个类就成为当前类. class MyClass # 现在当前类是MyCl

gxcbuf的博客 587

Helix实战教程:从零构建你的第一个Ruby类

Helix是一个强大的工具,让你能够轻松创建原生Ruby扩展,无需担心复杂的底层实现。本教程将带你逐步了解如何使用Helix从零开始构建你的第一个Ruby类,即使你没有C语言背景也能轻松上手。 ## 准备工作:安装Helix 在开始之前,确保你已经安装了Helix。首先需要克隆Helix仓库: ```bash git clone https://gitcode.com/gh_mirrors/

gitblog_00254的博客 713

Ruby 中class_eval 是什么

在 Ruby 中,class_eval是一个非常强大的方法,它允许你在运行时动态地修改或扩展类的定义。具体来说,class_eval方法可以让你打开一个已有的类(甚至包括核心类),并在该类中添加新的方法、修改现有方法或者执行其他代码块。class_eval。

Java的专栏 639

【Ruby】instance_eval和class_eval用法讲解

最近开始学习Ruby,在看到instance_eval和class_eval的用法时,觉得很是困惑,于是对此进行研究并整理一下。

sunset108的专栏 2910

[Ruby学习总结]Ruby中的类

1、类名的定义以大写字母开头,单词首字母大写,不用"_"分隔 2、实例化对象的时候调用new方法,实际上调用的是类里边的initialize方法,是ruby类的初始化方法,功能等同于Java中的构造方法 class Person def initialize(name, gender, age) @name = name @gender = gender @ag

VF@优快云 1658

Ruby 实例变量和类变量

在Ruby中类实例变量、类实例方法和类变量、类方法的区别比较微妙,而且用法也有相当的区别。本文探讨一下他们的定义和基本的使用场景,以抛砖引玉...         一.类实例变量和类变量         类变量大家都很熟悉了,就是在类定义中用@@开头的变量。类变量是用于

菜鸟成长篇 1268

Ruby on Rails 临时文件类Tempfile Class

A utility class for managing temporary files. When you create a Tempfile object, it will create a temporary file with a unique filename. A Tempfile objects behaves just like a File object, and you

野草志 2990

《Ruby元编程》之class关键词

class是个关键词(Keyword)。  但跟java不同的是class并非是定义一种模板,并非类声明(class declaration)。而是一种操作符. 记住:class不是class declaration,而是一种操作符。 这句话理解很关键,否则下面的代码你看不懂:(其实Ruby不应该跟java的class混用同一个名称,@#%…………,让人家理解混淆)。

Java的专栏 1123

Ruby 类的创建

class Language   def initialize(name, creator)     @name = name     @creator = creator   end   def description     puts "I'm #{@name} and I was created by #{@creator}!"   endend r...

167
上一篇: Ruby 学习(九)范围Range
下一篇: Ruby 学习(十一)模块Module
zhhelnice
博客等级 码龄10年 7粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值