js

ruby基础

2022-12-12  本文已影响0人  RickyWu585
hash = {
  name:"frank",
  "age"=>18
}

hash[:name]   // "frank"
hash["age"]    // 18
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
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 // 深拷贝
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"
a = nil
a.nil? //true
a,b = [1,2,3] // a = 1,b = 2
a, *b = [1,2,3] // a = 1,b = [2,3],类似js的 ...args
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}
// 默认值
def hello name="world"
  p "hello #{name}"
end
hello //因为p方法返回nil,所以hello返回nil
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}"}
def hello name, &block
  block.call(name)
end
hello("frank") {|x| p "#{x}"}
def hi 
  if block_given?
    yield
  else
    p "no block"
  end
end
hi本身不会被调用,hi.call时才会被调用,因此hi可以作为一个函数变量来当做其他方法的参数
hi = proc {|x| "hello #{x}"}
hi.call("world")
等同于
hi = Proc.new {|x| "hello #{x}"}
hi.call("world")
hello = -> (name) { "hello #{name}" }
hello.call("world")
a = 1
if a>=1
  "ok"
end
or
unless a<1
  'ok'
end
or
p "ok" unless a<1
class Array
  def find
    each do |value|
      return value if yield value
    end
  end
end
[1,2,3].find { |value| value == 2 }  // 2
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
def hi
  p "hello"
end

send :hi
a = [1,2,3]
a.respond_to? :length // true, 判断是否有length方法
上一篇下一篇

猜你喜欢

热点阅读