ruby 语法

2018-03-25  本文已影响0人  Lucien_d70a

hello ruby

ruby 字符串插入

name = "ruby"
puts "你好吗,#{name}"  
=> # 你好吗,ruby
# 类似与js ES6的 "你好吗 ${name}" 

任何语言都通用的数据类型

  1. String 字符串 "abc"
  2. Number 数值 123123
  3. Array. 数组 [1,2,3]
  4. Hash #类似js的对象,key:value
{
   "name": "dashi",
   "birth": "1982-9-16"
}

方法

def method_name (var1, var2)
   expr..
end
def method_name (var1=value1, var2=value2)
   expr..
end
method_name 25, 30
def test(a1="Ruby", a2="Perl")
   puts "编程语言为 #{a1}"
   puts "编程语言为 #{a2}"
end
test "C", "C++" # 编程语言为C,编程语言为C++,
test # 编程语言为Ruby,编程语言为Perl,

Ruby 中的每个方法默认都会返回一个值。这个返回的值是最后一个语句的值。

块和函数

当方法定义在类的外部,方法默认标记为 private。另一方面,如果方法定义在类中的,则默认标记为 public。

方法默认的可见性和 private 标记可通过模块(Module)的 public 或 private 改变。

当你想要访问类的方法时,您首先需要实例化类。然后,使用对象,您可以访问类的任何成员。

def test
 puts "hello ruby"
end
test # => hello ruby
def test(var1 = "hello",var2 = "ruby")
 puts "#{var1} #{var2}"
end
test # => hello ruby
test("hello","rails") #=>hello rails
def test(var1 = "hello",var2 = "ruby")
 puts "#{var1} #{var2}"
 yield
end
test {puts "hello cwh"} 
#=> hello rails
#=> hello cwh

def test(var1 = "hello",var2 = "ruby")
 puts "#{var1} #{var2}"
 yield "hello cwh"
end
test {|e| puts e} 
#=> hello rails
#=> hello cwh
test do 
 xxxx
end

test { |接受的参数| xxxx }
# 以上方法都可以用yield来调用


# 或者 通过参数传递来调用,但是block必须是最后一个参数
def test (&block)
 &block.call
end
give "我", :what => '咖啡', :count => '2', :unit => '杯' do
  "味道不错哟!"
end

#其实就是
give( 
"我" ,
{ :what => '咖啡', :count => '2' }
do "味道不错哟!" end ),

变量

面向对象

  1. 局部变量:局部变量是在方法中定义的变量。局部变量在方法外是不可用的。在后续的章节中,您将看到有关方法的更多细节。局部变量以小写字母或 _ 开始。
  2. 实例变量:实例变量可以跨任何特定的实例或对象中的方法使用。这意味着,实例变量可以从对象到对象的改变。实例变量在变量名之前放置符号(@)。
  3. 类变量:类变量可以跨不同的对象使用。类变量属于类,且是类的一个属性。类变量在变量名之前放置符号(@@)。
  4. 全局变量:类变量不能跨类使用。如果您想要有一个可以跨类使用的变量,您需要定义全局变量。全局变量总是以美元符号($)开始。
initialize 方法
class Box
   def initialize(w,h)
      @width, @height = w, h
   end
end
# 一但创建对象时候,就会触发
访问器(getter)
class Box
   # 构造函数
   def initialize(w,h)
      @width, @height = w, h
   end
 
   # 访问器方法
   def printWidth
      @width
   end
 
   def printHeight
      @height
   end
end
 
# 创建对象,初始化盒子的高度与宽度
box = Box.new(10, 20)
 
# 使用访问器方法
x = box.printWidth()
y = box.printHeight()
 
puts "盒子宽度 : #{x}"
puts "盒子高度 : #{y}"

#=>盒子宽度 : 10
#=>盒子高度 : 20

设置器(setter)

# 定义类
class Box
   # 构造器方法
   def initialize(w,h)
      @width, @height = w, h
   end
 
   # 访问器方法
   def getWidth
      @width
   end
   def getHeight
      @height
   end
 
   # 设置器方法
   def setWidth=(value)
      @width = value
   end
   def setHeight=(value)
      @height = value
   end
end
 
# 创建对象
box = Box.new(10, 20)
 
# 使用设置器方法
box.setWidth = 30
box.setHeight = 50
 
# 使用访问器方法
x = box.getWidth()
y = box.getHeight()
 
puts "盒子宽度 : #{x}"
puts "盒子高度 : #{y}"

#=>盒子宽度 : 30
#=>盒子高度 : 50

这集中方法比较常用 所以 attr_accessor :variable_name,ttr_reader :variable_name、attr_writer :variable_name 三种属性声明方法,其中:accessor=reader+writer。

实例方法
# 定义类
class Box
   # 构造方法
   def initialize(w,h)
      @width, @height = w, h
   end
   # 实例方法
   def getArea
      @width * @height
   end
end
 
# 创建对象
box = Box.new(10, 20)
 
# 调用实例方法
a = box.getArea()
puts "Area of the box is : #{a}"

#=>Area of the box is : 200
类方法和类变量
class Box
   # 初始化类变量
   @@count = 0
   def initialize(w,h)
      # 给实例变量赋值
      @width, @height = w, h
 
      @@count += 1
   end
 
   def self.printCount()
      puts "Box count is : #@@count"
   end
end
 
# 创建两个对象
box1 = Box.new(10, 20)
box2 = Box.new(30, 100)
 
# 调用类方法来输出盒子计数
Box.printCount()
#=>Box.printCount()

ps: 实例方法和类方法不同就是 实例方法要new 类方法不用new。

访问控制
类的继承
重载
上一篇下一篇

猜你喜欢

热点阅读