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