继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

ruby基础汇总

LEATH
关注TA
已关注
手记 315
粉丝 93
获赞 466

在安装好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的源



作者:程序员小哥哥
链接:https://www.jianshu.com/p/e3217fbd9933

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP