ruby基础汇总

作者: 程序员小哥哥 | 来源:发表于2017-07-26 11:19 被阅读72次

在安装好ruby的环境之后,我们就可以来敲ruby代码了,首先我们先来个hello,world(每学一门语言,都是hello,world)
在ruby里有irb调试,不过我们推荐创建.rb文件,因为irb不能写好之后一块运行,一行一行敲,太麻烦了。。。

一:输出hello,world

说明:这里我们首先创建一个空文件,hello.rb,然后打开编辑,我这里用的vim编辑器,当然大家可以自行选择,如sublime等。。。

ruby_image1.png
打上puts "hello,world",然后运行ruby hello.rb命令来输出即可
解释:用puts来进行输出,这里我们就区分p,print,puts的区别了,大家可以单独进行搜索。

二:字符串插值

在ruby中,我们最好在所有的地方都用字符串插值,避免使用+的方式
原因:不同的数据类型,使用+会报错

2.1:两种方式都可以,因为都是字符串,这里我用irb来掩饰,方便看出错误

ruby_image2.png

2.2:不同类型,一个字符串,一个数字(这里会报类型转换的错,而#{*}却不会)

ruby_image3.png

三:变量

类变量: class variable, 例如: @@name, 作用域:所有的多个instance 会共享这个变量。
实例变量 instance variable, 例如: @color, 作用域仅在instance之内。
普通变量: local variable, 例如: age = 20, 作用域仅在 某个方法内。
全局变量: global variable, 例如:$name = "railsboy", 作用域在全局。

ruby_image4.png

代码版

class Apple  
  
  @@from = 'China'  
  
  def color = color  
    @color = color  
  end  
  
  def color  
    return @color  
  end  
  
  def get_from  
    @@from  
  end  
  
  def set_from from  
    @@from = from  
  end  
end  
  
red_one = Apple.new  
red_one.color = 'red'  
puts red_one.color  
# => 'red'  
red_one.set_from 'Japan'  
puts red_one.get_from  
# => 'Japan'  
  
green_one = Apple.new  
green_one.color = 'green'  
puts green_one.color  
# => 'green'  
puts green_one.get_from  
# => 'Japan'  

图文版:

ruby_image5.png
ruby_image6.png

四.类方法与实例方法(记住类方法就是直接用方法名输出,而实例方法需要类.new.方法名)

ruby_image6.png
代码版:
class Apple  
  # 类方法  
  def Apple.name  
    'apple'  
  end  
  
  # 实例方法  
  def color  
    'red'  
  end  
end  
  
Apple.new.color  
# => red  
  
Apple.name  
# => apple 

图文版

ruby_image7.png

5.条件语句


#if else end 是最常见的  
a = 1  
if a == 1  
  puts "a is 1"  
elsif a == 2  
  puts "a is 2"  
else  
  puts "a is not in [1,2]"  
end  
#case when end 分支语句  
#例如:  
a = 1  
case a  
  when 1 then puts "a is 1"  
  when 2 then puts "a is 2"  
  when 3,4,5 then puts "a is in [3,4,5]"  
  else puts "a is not in [1,2,3,4,5]"  
end  
#五.三元表达式  
a = 1  
puts a == 1 ? 'one' : 'not one'  
# => one  

六.Ruby中的Method

1.Method返回值
所有方法都有返回值,方法体最后一行代码的返回值默认会作为方法的返回值,也可以显示的使用return关键字

def hi  
  p 'ok'  
end  
hi # => nil 

p默认返回值是nil

def hi  
  'ok'  
end  
hi # => 'ok' 
def hi  
  return '2'  
end  
hi # => 2  

七.Ruby中的Block

1.Block
Blcok类似于一个方法,可以使用do/end来定义,也可以使用大括号{}

File.open('file.log', 'w+') do |f|  
  f.puts 'line 1'  
end  

2.Block内置方法

[1,2,3].each do |x|  
  p x  
end  
{a:1, b:2}.each do |x, y|  
  p y  
end 

**3.Blcok变量作用域

Ruby 1.8.7(包括)之前的版本的外部变量x的值会被block修改**

x = 10  
[1,2,3].each do |x|  
  p x  
end  
x   # => 10 

4.自定义Block

def hi name  
  yield(name)  
end  
  
hi('code'){ |x| "hello #{x}"}  

说明:yield内置关键字,为调用外部Block的关键字

八.Ruby中的一些方法的作用

1.proc
proc相当于定了一个方法变量,可以把方法当做参数传递

hi = proc{ |x| "hello #{x}" }  
hi.call('world')  
  
#等同于  
hi = Proc.new { |x| "hello #{world}"}  
hi.call('world')

2.lambda
lamba和proc非常相似

hi = lamba {|x| "hello #{x}"}  
hi.call('world') 

3.ruby中require和load
相同点:
都会在$LOAD_PATH下面查找当前要引入的文件
不同点:
1.require调用文件时不需要".rb"的文件后缀,而load需要
2.require针对同样的文件只会调用一次,而load会反复调用

4.ruby中render的作用
render这个单词的意思是呈递、呈现的意思。

def new  
  @user = User.new  
end  
def create  
  @user = user.new(params.require(:user).permit(:username, :password))  
  if @user.save  
    flash[:notice] = "注册成功,请登录"  
    redirect_to new_session_path  
  else  
    render action: :new  
end  

render非常强大,这个方法是代表我们http,我们需要向浏览器返回一个结果。render的参数很多,这里指定了action,action相当于hash里面的 key。
注意:这里不代表走了new方法,而是渲染了new。

5.ruby中||=的作用

irb(main):002:0> a = nil  
=> nil  
irb(main):003:0> a ||= 4  
=> 4  
irb(main):004:0> a  
=> 4  
irb(main):005:0> a ||= 'f'  
=> 4  
irb(main):006:0> a  
=> 4  

意思:为空的时候设置一个值

其他

一.ruby把gem源更换国内源gems.ruby-china.org数据源
1.编辑一下命令查看本地的源

gem sources -l  
20170204113117153.png
2.把默认源移除,添加ruby-china的源
gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/

3.再次查看本地的源,会发现已经换成了ruby-china的源

相关文章

网友评论

    本文标题:ruby基础汇总

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