Ruby基础学习

基本例子

输出一个带变量的字符串

character_name = "john"
puts "name is " + character_name

结果:
name is john
2.print和puts的区别
连续输入两次print输出结果不换行,puts会换行
3.真值,假值和空值

ismale  = true
isfmale = false
isnone  = nil

字符串操作

a = "Zk \nAcadamy"  #换行	
puts a
#Zk 
#Acadamy
a = "Zk Acadamy"   #转大写
puts a.upcase()
#ZK ACADAMY
a = "Zk Acadamy"    #转小写
puts a.downcase()
#zk acadamy
a = "      Zk Acadamy       "    #删除空格
puts a.strip()
#Zk Acadamy
a = "      Zk Acadamy       "    #统计字符个数
puts a.length()
#23
a = "Zk Acadamy"    #检测是否包含特定字符串
puts a.include?"Acadamy"
puts a.include?"Acadamys"
#true
#false
a = "Zk Acadamy"   #索引查找
puts a[0]
puts a[0,3]
puts a.index("Aca")
puts a.index("Ace")
#Z
#Zk 
#3
#(空nil)

数值操作

puts 5 + 9
puts 5 - 9.5
puts 2*3
puts 2**3   #2的三次方
puts 2/3
puts 2%3
num = -20
puts num.abs()

num = 20.456  #四舍五入
puts num.round()

数值转换

num = 10 # 数字转字符串
str = num.to_s  
# "10"

str = "10" # 字符串转整数
num = str.to_i  
# 10

str = "10.5" # 字符串转浮点数
num = str.to_f  
# 10.5

str = "hello" # 如果字符串不能被解析为一个有效的数字,to_i和to_f方法将返回0:
num = str.to_i  
# 0
num = str.to_f  
# 0.0

数组

friends = Array["Amy","Bob","Catte","Andy"]
print friends ,"\n"
print friends.reverse()  #对数组反向
print friends.sort() #对数组排序

哈希(python中的字典)

实际上就是key value的关系

states = {
    "Pennsylvania" => "PA",
    "New York" =>"NY",
    "Oregon" => "OR"
}

puts states["Oregon"]  #OR

方法(函数)

def sayhi(name)
    puts ("hello user " + name)
end

sayhi("Mike") #hello user Mike

I/O和流控制

if语句

ismale = true
istall = false
if ismale and istall
    puts "you are male and tall"
elsif !ismale and !istall
    puts "you are not male and not tall"
else
    puts "you are not male"    
end

循环

while语句

index = 1 
while index<=5
    puts index
    index +=1
end

until 语句

index = 1 
until index>=5
    puts index
    index +=1
end

for 语句

# for循环
for i in 1..5
  puts i
end

unless语句

index = 1 
unless index >=5
    puts index
    index +=1
end

each循环

(1..5).each do |i|
  puts i
end

文件的操作

打开并读取文件

file = File.open("example.txt", "r") #"r" 表示以只读模式打开文件。
contents = file.read
puts contents
file.close

写入文件

file = File.open("example.txt", "w") #"w" 表示以写模式打开文件(如果文件已存在,将覆盖该文件)。
file.puts "Hello, Ruby!"
file.close

追加内容到文件

file = File.open("example.txt", "a")#"a" 表示以追加模式打开文件(不会覆盖现有内容,而是添加新内容)
file.puts "New line of text!"
file.close

逐行读取文件

File.foreach("example.txt") { |line| puts line }

重命名文件

File.rename("old_name.txt", "new_name.txt")

删除文件

File.delete("example.txt") if File.exist?("example.txt")

获取文件的详细信息

file_info = File.stat("example.txt")
puts file_info.size  # 文件大小
puts file_info.mtime # 文件的最后修改时间

检查文件是否存在

if File.exist?("example.txt")
  puts "文件存在。"
else
  puts "文件不存在。"
end

异常处理

简单处理异常例子

begin
  # 可能会引发异常的代码
  result = 10 / 0
  puts result
rescue ZeroDivisionError => e
  # 处理 ZeroDivisionError 异常
  puts "捕获到除以零的错误:#{e.message}"
end

puts "程序继续运行..."

begin 和 rescue 包围了可能会引发异常的代码块。
当遇到 ZeroDivisionError(除以零错误)时,rescue 捕获这个错误并执行相应的代码。
即使发生异常,程序也会继续执行后续的代码。

捕获多种异常

begin
  file = File.open("non_existent_file.txt")
  result = 10 / 0
rescue ZeroDivisionError
  puts "除以零错误。"
rescue Errno::ENOENT
  puts "文件未找到。"
end

puts "程序继续运行..."

捕获所有异常

begin
  # 可能会引发各种异常的代码
rescue => e
  puts "发生了一个错误:#{e.message}"
end

一个通常类

class Person
  # 初始化方法(构造函数),用于设置对象的初始属性
  def initialize(name, age)
    @name = name  # 实例变量
    @age = age
  end

  # 读取名称的方法
  def name
    @name
  end

  # 设置名称的方法
  def name=(new_name)
    @name = new_name
  end

  # 打印问候语的方法
  def greet
    puts "你好,我叫 #{@name},今年 #{@age} 岁。"
  end
end

# 创建 Person 类的实例
person = Person.new("张三", 30)
person.greet   # 输出:你好,我叫 张三,今年 30 岁。
person.name = "李四"
person.greet   # 输出:你好,我叫 李四,今年 30 岁。

initialize 方法是 Ruby 中的构造函数,当使用 Person.new 创建对象时会自动调用这个方法。
@name 和 @age 是实例变量,属于对象的属性。
name 和 name= 是访问器方法,用来获取和设置 @name 的值。
greet 是一个普通的方法,用于输出自我介绍信息。

使用 attr_accessor 简化属性访问

class Person
  attr_accessor :name, :age #attr_accessor 会自动生成 name 和 age 的 getter 和 setter 方法,因此我们不需要手动定义它们。

  def initialize(name, age)
    @name = name
    @age = age
  end

  def greet
    puts "你好,我叫 #{@name},今年 #{@age} 岁。"
  end
end

person = Person.new("张三", 30)
puts person.name  # 输出:张三
person.name = "李四"
puts person.name  # 输出:李四

类的继承

Student 类继承了 Person 类,并扩展了它的功能

class Person
  attr_accessor :name, :age

  def initialize(name, age)
    @name = name
    @age = age
  end

  def greet
    puts "你好,我叫 #{@name},今年 #{@age} 岁。"
  end
end

class Student < Person
  def initialize(name, age, grade)
    super(name, age)  # 调用父类的初始化方法
    @grade = grade
  end

  def study
    puts "#{@name} 正在学习。"
  end

  def greet
    super  # 调用父类的 greet 方法
    puts "我是一名 #{@grade} 年级的学生。"
  end
end

student = Student.new("王五", 18, 12)
student.greet   # 输出:你好,我叫 王五,今年 18 岁。我是一名 12 年级的学生。
student.study   # 输出:王五 正在学习。

Student 类继承了 Person 类,使用 < 符号实现继承。
super 关键字调用了父类的 initialize 和 greet 方法,避免重复编写代码。
Student 类新增了 study 方法,并对 greet 方法进行了扩展。

类方法(静态方法)

类方法属于类本身,而不是类的实例。可以使用 self 来定义类方法。

class MathUtil
  # 定义一个类方法,用于计算两个数的和
  def self.add(a, b)
    a + b
  end
end

result = MathUtil.add(5, 3)
puts result  # 输出:8

self.add 定义了一个类方法,可以通过 MathUtil.add 来直接调用,而不需要实例化对象

类的常量

类中可以定义常量,通常用来表示一些不变的值

class Circle
  PI = 3.14159  # 定义常量

  def initialize(radius)
    @radius = radius
  end

  def area
    PI * @radius * @radius
  end
end

circle = Circle.new(10)
puts circle.area  # 输出:314.159

PI 是一个常量,在类中使用大写字母表示。
常量的值在整个类中可以被引用,且一般不会改变。

类的继承和方法重写

如果子类需要修改父类中的某些方法,可以进行方法重写。可以通过 super 调用父类中的原方法,也可以选择完全重写它。

class Animal
  def speak
    puts "动物发出声音"
  end
end

class Dog < Animal
  def speak
    puts "汪汪汪"  # 重写父类的 speak 方法
  end
end

dog = Dog.new
dog.speak  # 输出:汪汪汪

子类 Dog 重写了父类 Animal 的 speak 方法,定义了自己的行为。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值