ruby基础

作者: RickyWu585 | 来源:发表于2022-12-12 18:03 被阅读0次
  • hash定义:
hash = {
  name:"frank",
  "age"=>18
}

hash[:name]   // "frank"
hash["age"]    // 18
  • hash api 总结:
hash = {name:"frank", "age"=>18}
hash.length
hash.keys // [:name,:age]
hash.values
hash.delete :name
hash.delete_if {|x| x == :name}
hash.has_key? :name
  • String api 总结:
a = "hello"
a.replace : 仅改变value,不会改变索引
a.sub("e",E) // 替换匹配到的第一个字符
a.gusb  // 替换匹配到的所有字符
a.reverse
a.start_with? "h" // true 
a.include? "e" // true
a.freeze // 不允许修改了,否则抛出异常,但允许重新给a赋值
a.split "" // 返回数组
b = a.dup // 深拷贝
  • Symbol(符号)是String的补充,可以看做字符串来使用,但是Symbol和String在本质上还是不同的,在Ruby中Symbol经常用来作为Hash的key和一些变化不频繁的字符串来使用。Symbol的值是唯一的
a = :hello
a.object_id  // 1000
a = :hello
a.object_id // 1000

a = "hello"
a.object_id  // 1000
a = "hello"
a.object_id  // 1006
  • ! 结尾的方法:
  1. 会改变变量自身
  2. 这只是一个约束
  3. 在 Rails 中 ! 的方法也被用来抛出异常
  4. 变量的地址不变
a = "hello"
b = a.capitalize
// b: "Hello", a: "hello"

a = "hello"
a.capitalize!
// a: "Hello"
  • nil代表空,不代表未定义,ruby中仅仅nil 和 false代表假,其他都为真
a = nil
a.nil? //true
  • ``的作用是用来直接运行shell命令的,比如 ls`
  • 数组常识:
a,b = [1,2,3] // a = 1,b = 2
a, *b = [1,2,3] // a = 1,b = [2,3],类似js的 ...args
  • 数组常用 api :
a = [1,2,3]
b = [1]
// 不会改变自身
a.first
a.last
c = a + b
c - a
b * 3

// 会改变自身
a.push
a.shift
a.pop
a.unshift
a << 3
a.concat [1,2]

a.index 2
a.max

b = ["a","b","c"]
b.join " "
b.clear
b.find {|x| x=="a"}
b.map/collect {|x| x.upcase}
a.uniq //去重
a.flatten
a.sort
a.count/length
a.delete_if {|x| x=="a"}
a.each {|x| p x}
  • hash是无序的,数组是有序的
  • Method:
// 默认值
def hello name="world"
  p "hello #{name}"
end
hello //因为p方法返回nil,所以hello返回nil
  • Block类似于一个方法;也可以理解为一个参数,其他方法调用时可以传这个参数;也可以理解为回调函数,该回调的参数是|x|。代码块可以使用do/end来定义,也可以使用{}
  • 自定义Block:yield为调用外部代码块的关键字
def hi name
  yield name
end
//此时参数必须加括号
hi('world') {|x| p "hello #{x}"}

代码块可以接收参数,yield用来传递参数
def hi
  yield "hello", "world"
end
hi {|x,y| p "#{x},#{y}"}
  • 显示声明 &block,用来说明该方法接收一个代码块
def hello name, &block
  block.call(name)
end
hello("frank") {|x| p "#{x}"}
  • 关键字block_given?:用来判断当前方法是否有代码块传递进来
def hi 
  if block_given?
    yield
  else
    p "no block"
  end
end
  • proc相当于定义一个方法变量,可以把方法当做参数传递
hi本身不会被调用,hi.call时才会被调用,因此hi可以作为一个函数变量来当做其他方法的参数
hi = proc {|x| "hello #{x}"}
hi.call("world")
等同于
hi = Proc.new {|x| "hello #{x}"}
hi.call("world")
  • lambda和proc很相似,参数必须传
  • ->定义代码块,类似lambda,参数必传
hello = -> (name) { "hello #{name}" }
hello.call("world")
  • unless(如果没有)相当于if的反向断言,目的是为了省略条件判断中的!
a = 1
if a>=1
  "ok"
end
or
unless a<1
  'ok'
end
or
p "ok" unless a<1
  • Block实践代码
class Array
  def find
    each do |value|
      return value if yield value
    end
  end
end
[1,2,3].find { |value| value == 2 }  // 2
  • raise用于主动抛出异常
def hello name
  raise name
end

hello  // argument error
hello "x" // error :"x"
  • 捕获异常
def hello 
  raise
end
// 知道错误情况下
begin
  hello
rescue RuntimeError
  puts "got it"
end
// 不知道情况下
begin hello
  rescue => e
    puts "catch exception with name: #{e.class}"
  else
    ...
  ensure
    # 无论有没有异常都执行
end
  • 变量类型
局部变量: a = "x",b = 1
常量: Name = "ricky"
全局变量:$hello = "hello"
实例变量:@a = "a"
类变量:@@b = "b"
  • 布尔表达式:
&&  => and
||  => or
!   => not

优先级比 = 等
a = nil
b = a || 1
// b: nil
  • send执行一个方法
def hi
  p "hello"
end

send :hi
  • respond_to?判断是否有...方法
a = [1,2,3]
a.respond_to? :length // true, 判断是否有length方法
  • $LOAD_PATH
  • 文件名要和内容的类或模块名一致: user_session.rb => class UserSession

相关文章

  • Ruby基础知识-基础解释

    Ruby基础知识-基础解释 ruby相关的命令行ruby命令行

  • Ruby 语言进阶

    Intro to Ruby (Ruby 基础) 什么是ruby?ruby是动态的(没有固定的类型),反射性的,面向...

  • ruby on rails 资料收集录

    Ruby ruby基础教程(中文第四版) 20分钟体验 Ruby Ruby.new Rails Ruby on R...

  • 《Ruby~笔记》0x03

    Ruby 基础语法及应用 IRB (Interactive ruby) 类似与 python shell prin...

  • ruby

    ruby基础教程https://www.kancloud.cn/imxieke/ruby-base/107295[...

  • ruby基础

    一、Ruby 类中的变量(Ruby 提供了四种类型的变量) 局部变量:局部变量是在方法中定义的变量。局部变量在方...

  • Ruby 基础

    按照以往的学习方式,每学一种编程语言都要先配置它的环境。因此,在正式写 Ruby 程序之前应该先配置环境。看这里,...

  • ruby基础

    ruby学习基础 inputthing = gets.chomp.to_i if语句 循环语句 循环异常抛出 fu...

  • Ruby基础

    文件编码### 若出现中文错误,则在文件头添加# -*- coding: UTF-8 - *-,文件也必须保存为u...

  • Ruby基础

    1、数组和散列表 2.block的使用 3.类 继承 get方法 get更简单的方式 set方法 set更简单的方...

网友评论

    本文标题:ruby基础

    本文链接:https://www.haomeiwen.com/subject/xjtcqdtx.html