`
rensanning
  • 浏览: 3549358 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:38167
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:607360
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:682398
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:89397
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:401879
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69710
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:91742
社区版块
存档分类
最新评论

Ruby基础知识

 
阅读更多
Ruby:面向对象、开源、动态类型、强类型、解释型的脚本语言。

(1)注释Comment
print "Hello world\n" # 单行注释

=begin
↑多行注释 第一行
↓多行注释 第二行
=end


(2)分隔符Separator
print "abc"; print "def" # ';' 为分隔符,一行内可写多条语句
print "123" # 如果一行一条语句的话,不需要分号结束


(3)输出Output
print "Hi\trensanning" # 调用to_s方法输出,但不换行
puts  "Hi\trensanning"  # 调用to_s方法输出,但末尾换行
p "Hi\trensanning"  # 调用inspect方法输出,等价于puts
															
print "Hello", " World\n" # 支持多个参数,多项目输出


(4)语句Statements
value1 = 5 # 赋值语句	
value2 = value3 = 10 # 连续赋值	
																
sum = value1 + value2 \	# 默认换行为语句结束,可采用“\”来折行输入语句	
      + value3																
																
x = 0																
x += 2																
x *= 2  # x = x * 2


(5)数据类型Data Types
a = 123 # Numeric数值 a.class 为 Fixnum
b = "abc" # String字符串  b.class 为 String
c = [1, 2, 3] # Array数组 c.class 为 Array(c[0] == c[-3] == 1)
d = {100 => "perfect", "absent" => 0} # Hash散列 d.class 为 Hash(d[100] == "perfect")
e = 1..2 # Range范围 e.class 为 Range
f = false # Boolean布尔型 f.class 为 FalseClass
															
value = nil  # Nil


(6)变量Variables
VAR  = "常量" # 大写字母开头
$var = "全局变量" # '$' 开头
															
def func															
  var = "局部变量" # 小写字母或下划线开头
end															
															
class Class															
  @@var = "类变量" # '@@' 开头
  def initialize															
    @var = "实例变量" # '@' 开头
  end															
end															
															
# Ruby中的常量并不是真正的常量,是可以被重新赋值的(会有警告)
FOO = "hello"
FOO = "world"
(irb):8: warning: already initialized constant FOO
(irb):7: warning: previous definition of FOO was here
p FOO
=> "world"


(7)操作符Operators
a = 100 # 赋值运算
a = (1 + 2) / (3 - 4) * 5 # 四则运算
a = (1 && 2) and (3 || 4) or !(5) # 逻辑运算
a = 7 % 2 # 取余数
a = (1 == 2) or (3 != 4) or (5 < 6) or (7 <= 8) # 比较运算

a > 5 ? puts(a) : "oh no" # 三元操作符

a, b = 10, 20 # 多值赋值
a, b, c = "a", "b", "c"   # a="a"; b="b"; c="c"
a, b, c = "a", "b"        # a = "a"; b = "b" ; c= nil
a, b = "a", "b", "c"      # a = "a"; b = "b"
a, b = b, a               # tmp = a ; a = b ; b = tmp

a = ["a", "b", "c"]       # a = ["a","b","c"]
a, b = ["a", "b", "c"]    # a = "a"; b = "b"
a, b, c = ["a", "b"]      # a = "a"; b = "b" ; c= nil

number ||= 1 # ||=赋值
number = 1 if number.nil?
number = 1 unless number

# 区分== 、equal?、===、eql? 的不同


(8)控制语句Control Loop
# if 语句
if a > 5 then puts a end  # 一行版
puts a if a > 5  # 条件后置
# unless 语句
# case 语句
case name
when "jack" then "i am rose"
when "rose" then "jack i miss u"
else "get out from here"
end

# while 语句
while i > 5 do
  i -= 1
end
i -= 1 while i > 5

# until 语句
until i <= 5 do
  i -= 1
end
i -= 1 until i<= 5

# for 语句
for x in [1,2,3]
  puts x
end

# loop语句(无限循环)
loop do
  puts "continue" # break、next、redo、retry
end

# times/upto/downto 方法


(9)字符串String
'Some\tString' # 单引号不转义特殊字符 Some\\tString
"Some\tString" # 双引号转义特殊字符 Some\tString

message = %q(Any string can be here) # 等价于 "Any string can be here"
message = %Q|Any string can be here|

(("a" * 2) + "b") * 3 # 字符串的链接和重复 "aabaabaab"

"abcdefg"[3 .. 5] # 取子串 "def"
"abcdefg"[0,4] # 取子串 "abcd"
"abcdefg"[-2,4] # 取子串 "fg"

a = "abcdefg"
a[3 .. 5] = "xyz" # 部分内容置换 "abcxyzg"

1.to_s + 2.3.to_s + [4, 5].to_s # 通过to_s转化成字符串 "12.345"

"12".to_i + "34".to_i # 通过to_i字符串转整数 46

"a = #{a}" # 插入变量值

"abcdefg".length # 文字列長

"Split the sentence".split # 字符串分割 ["Split", "the", "sentence"]

str = "Tokyo"
str << ",Japan" # 字符串链接  "Tokyo,Japan"

"Tokyo".concat(",Japan")

"abcde".reverse # 字符串翻转 "edcba"

"abccabbcabbbccba".gsub(/ab+/, "xy") # 通过正则表达是替换内容 "xyccxycxyccba"

# 在Java或Python语言中,字符串是不可变的。在Ruby中字符串和数组一样是可变的。


(10)数值Number
a = 10          # 整数 Fixnum
b = 9999999999  # 大整数 Bignum 
c = 3.14        # 浮点数 Float

d1 = 214        # 默认是10进制数
d2 = 0b11010110  # 以0b开头的是2进制数
d3 = 0326        # 以0开头的是8进制数
d4 = 0xD6        # 以0x开头的是16进制数

e = 3_420_500    # 通过下划线定义数字  3420500

f = 5.01e4       # 科学计数法 50100.0

# 数值的比较方法
value = 100
value.zero?           # false
value.nonzero?        # 100
value.integer?        # true
value.even?           # true
value.odd?            # false
value.between?(0,10)  # false

# 数值的数学方法
value = 100.14
value.ceil     # 101
value.floor    # 100
value.round    # 100
value.truncate # 100

quotient, remainder = 5.divmod 3 # 取商和余数 [1,2]
quotient = 5.div(3)
remainder = 5.modulo(3)

price = 6.5
r = "%.2f" % price # 格式化输出数字 "6.50"

# 生成随机数
rand          # 默认是0到1
rand 100      # 0..100
srand 3341    # 设置种子


(11)数组Array
a = [1, 3, 4, 5, 7]     # 创建数组
b = 2, 3, 5, 7, 9       # 中括号可省 (多值赋值)

colors = %w(red green blue )  # 通过String列表生成数组 ["red", "green", "blue"]

array = [2005, 2006, 2007, 2008]
array[0]      # 取数组的值 2005
array.at(0)

array.size        # 数组的大小 4

a | b             # 数组的和集 [1, 3, 4, 5, 7, 2, 9]
a & b             # 数组的交集 [3, 5, 7]

a + b             # 数组连接 [1, 3, 4, 5, 7, 2, 3, 5, 7, 9]
a - b             # 数据的差(去重) [1, 4]

a.shift           # 取出第一个元素并从数组中删除该元素
# a = [3, 4, 5, 7]

a.join("/")  # 按指定字符将数据连成字符串 "3/4/5/7"

a << 6 # 在数组末尾添加元素 [3, 4, 5, 7, 6]

(a | b).sort  # 数组排序 [2, 3, 4, 5, 6, 7, 9]

a.map { |i| i * i } # 遍历修改数组元素  [9, 16, 25, 49, 36]


(12)散列Hash
hash = {"Yamada" => 34, "Katou" => 28, "Endou" => 18} # 生成散列对象
h = Hash["suzuki", 87, "itou", 76, "yamada", 69] # 通过数组生成散列

hash = { :foo => true } # 冒号 与 =>的区别
hash = { foo: true } # Ruby1.9引入冒号,注意冒号左侧没有空格
hash = { "foo" => true }
hash = { "foo-1" => true }    
hash = { :foo : true } # NG  
hash = { "foo" : true } # NG  
hash = { :foo-1 => true } # NG  
hash = { foo-1 => true } # NG  

hash["Katou"] # 获取散列中的值
hash.fetch("Katou")

hash = {"Lemon" => 100, "Orange" => 150}
hash["Lemon"] = 120 # 修改散列中的值
hash["Banana"] = 90 # 往散列中添加元素

hash.store("Lemon", 120)
hash.store("Banana", 190)

hash.length # 散列的大小
hash.size

h = {"suzuki" => 87, "itou" => 76, "yamada" => 69}
h.delete("itou") # 删除散列的元素

h = {"suzuki" => 87, "itou" => 76, "yamada" => 69}
h.clear # 清空散列的所有元素

array = hash.keys # 散列键的数组
array = hash.values # 散列值的数组
array = hash.to_a # 散列键值的数组


(13)符号Symbol
# 字符串是可变的,符号是不可变的。

x = :my_str
y = :my_str  #x和y的object_id相同

x = "my_str"
y = "my_str"  #x和y的object_id不同

hash = { :name => "rensanning", :city => "dalian"}  # 作为哈希表的 key
hash[:name]

class SomeClass  
  attr_accessor :whatever  # 类的实例变量
end 

class SomeClass  
  def whatever  
    @whatever  
  end  
  def whatever=(val)  
    @whatever = val  
  end  
end

North, South, East, West = :north, :south, :east, :west  # 枚举类型

def some_keyword_params( params )  # 关键字参数
  params
end
some_keyword_params( :param_one => 10, :param_two => 42 )


(14)集合Collections
1..5                    # Ranges 有序的数字
['a', 1, 'c']           # Arrays 有序的List
{:a => 'a', :b => 'b' } # Hashes 键值对
Set['a', 'b', 'c']      # Sets 不重复的集合 require 'set'


(15)方法Method
def printHello(name)              # 方法的定义
  print("Hello, #{name}")
end

printHello("rensanning")           # 调用方法
printHello "rensanning"            # 括号可以省略

p hoge()                           # NG NoMethodError
def hoge()
  return 'hoge'
end

def hoge()
  return 'hoge'
end
p hoge()# 方法的定义必须在调用之前

Math.sin(2)                         # 调用module的方法

def addString(str)
  return str + ",Japan"             # 方法的返回值
end
def addString(str)
  str + ",Japan"                    # 最后一条语句的执行结果就是返回值
end

addString("Tokyo")

def printHello(msg="No msg", name="No name")   # 参数的默认值
  print(msg + "," + name + "¥n")
end

printHello()

def printHello(msg, *names)   # 以数组形式接收可变参数
  names.each do |name|
    print(msg + "," + name + "¥n")
  end
end

printHello("Hello")
printHello("Hello", "Yamada")
printHello("Hello", "Yamada", "Endou")

def keisan(num1, num2)
  return num1 + num2, num1 - num2   # 返回多个值用于多值赋值
end
plus, minus = keisan(10, 25)

if book.respond_to?(request)   # respond_to?判断是否定义了某个方法
  puts book.send(request)      # send调用某个方法
else
  puts "Input error"
end

String upcase/upcase!          # !号结束的方法一般都会修改原变量的值
Arrays sort/sort!

# 只有overriding没有overloading


(16)代码块Code Block
values.each { |x| print x }   # 代码块在一行内时,用大括号括起来
values.each { |x|   # 多行时使用{}
   print x
}
values.each do |x|  # 多行时使用do...end
   print x
end

block = lambda { |x| puts x } # 创建代码块(lambda{} Proc.new{})并调用
block.call "Hello World!"

def call_twice# 接受代码块并调用
  puts "I'm about to call your block."
  yield
  puts "I'm about to call your block again."
  yield
end
call_twice { puts "Hi, I'm a talking code block." }

def repeat (n, &block)           # 代码块参数
  n.times { block.call } if block
end
repeat(2) { puts "Hello." }

def add_to_call(array, number)    # 闭包代码块
  array.collect { |x| x + number }
end
add_to_call([1,2,3], 10) 


(17)迭代Iterator
str = "test"
str.each_char do |c|               # 字符串的迭代
   puts c
end

range = 5..10
range.each do |num|                 # 范围对象的迭代
  puts "num = ", num
end

a = [1, 10, 100]
a.each do |i|                       # 数组的迭代
  puts i
end

a = {"Father" => 50, "Mother" => 48, "Son" => 20}
a.keys.each do |i|   # 按键迭代散列 a.values为值得数组
  puts i, ":", a[i], "\n"
end

hash = {"key" => "vall", "key2" => "val2"}
hash.each do |k,v| # 按键值迭代散列
  puts "#{k} is #{v}/n"
end

(1..5).each_with_index {|x,i| print x, "-", i, " "}   # 迭代时带上索引 1-0 2-1 3-2 4-3 5-4

# 还有.map .select .reject .inject等方法


(18)类的基本概念
class Car     # 定义类
end

car1 = Car.new() # 生成对象
car2 = Car.new

class Car
  def initialize(carname="None")   # 初期化方法
    @name = carname
  end
end

car1 = Car.new("civic")    # new方法创建类对象并调用initialize方法
car2 = Car.new()

class Car
   def name=(v)# setter
     @name = v
   end
   def name # getter
       @name
   end
end

q = Car.new
q.name = "QQ"
q.name

# 成员变量的访问控制
class Car
  def initialize(carname="None") # attr_reader 只读
    @name = carname              # attr_writer 只写
  end                            # attr_accessor 可读可写
  
  attr_accessor :name
end

car = Car.new()
car.name = "civic"
print(car.name)

class Car  # 定义类的常量
  NAME = "name"
end

p Car::NAME # 调用类的常量

# 类的命名空间
module Foo
  class Bar
    def say
      p "Hi"
    end
  end
end

Foo::Bar.new.say


(19)类的继承
# 继承 Ruby不支持多继承
class Car
  def accele
    print("accele")
  end
end
class Soarer < Car
  def open_roof
    print("open_roof")
  end
end

# 调用父类的方法
class Car
  def accele(acceletime)
    print(acceletime, "Car's accele")
  end
end
class Soarer < Car
  def accele(acceletime)
    super(acceletime)
    print("Soarer's accele")
  end
end


(20)类的访问控制
class Car
  public # 此行以下到下一个控制符间均为public方法
         # 默认所有方法除过initialize都是public,可省
  def accele(acceletime=1)
    print("Car's accele¥n")
  end

  private           # 此行以下均为private方法

  def calcSpeed(acceletime)
    return acceletime * 10
  end
end


(21)类的方法
# Ruby不支持method overload
# 类中只能有一个方法名相同的方法。
# 对于方法重载需要依据参数。
# 星号用于接受可变参数
class Rectangle
  def inititalize(*args)
    case args.size
    when 2  
       //TODO    
    else
       //TODO    
    end
  end
end

class Test
  def self.class_method1 # 定义类级别的方法
    puts "hello1"
  end
  def Test.class_method2
    puts "hello2"
  end
end

class Car # 定义对象方法
  def inspect
    "Cheap car"
  end
end

porsche = Car.new
porsche.inspect # 修改前 Cheap car
def porsche.inspect
  "Expensive car"
end
porsche.inspect # 修改后 Expensive car
other_car = Car.new
other_car.inspect # 对于其他的对象 不受影响=> Cheap car

def method_missing( id, *arguments )# 定义类的Missing methods
  puts "Method #{id} was called, but not found. It has " +
       "these arguments: #{arguments.join(", ")}"
end


(22)开放类Open Class(又称猴子补丁Monkey Patch)
# 允许在任何地方给已经存在的类添加或修改方法,不管是自定义的类还是ruby本身的基础类。

"123".ren  # NoMethodError

class String
 def ren
   puts "rensanning"
  end
end

"123".ren  # rensanning


(23)鸭子类型Duck Typing (行为决定类型)
引用
When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.
当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。

class Duck  
  def quack  
    'Quack!'  
  end  
  
  def swim  
    'Paddle paddle paddle...'  
  end  
end  
  
class Goose  
  def honk  
    'Honk!'  
  end  
  def swim  
    'Splash splash splash...'  
  end  
end

def make_it_swim(duck)  
  duck.swim  
end  
puts make_it_swim(Duck.new)    #Paddle paddle paddle…
puts make_it_swim(Goose.new)   #Splash splash splash…


(24)动态定义方法
class Conjure
  def self.conjure(name, lamb)
    define_method(name, lamb)
  end
end

Conjure.conjure(:glark, ->{ (3..5).to_a * 2 })

Conjure.new.glark #=> [3, 4, 5, 3, 4, 5]  


(25)异常Exception
# 抛出异常
def bad_call(n)
  raise "Bad call 0" if n==0
end

# 捕获异常
def handle_bad_call
  begin
    bad_call 5
  rescue Exception => ex
    puts ex.message# Print exception message
    puts ex.backtrace            # 打印backtrace
  else
    puts "no exception"          # 没有异常时执行
  ensure
    puts "always execute"        # 不管是否有异常都执行
  end
end

# Retry
def handle_bad_call
  max = 0
  begin
    max += 1
    bad_call 0
  rescue
    puts "error handled"
    if (max<5) then retry end    # 从begin开始Retry
  end
end


(26)模块Module
# 没有interface,只有比interface更强大的module与mixin
# Mixin 方法(通过 include 其他模块而得到的方法,实现多重继承的效果)

# 定义模块
module HeikinModule
  def heikin(x, y)
     (x + y) / 2
  end
end

# mixin 包含模块
class Test
  include HeikinModule

  def dispHeikin(x, y)
    kekka = heikin(x, y)
    print("AVG(", x, " , ", y, ") = ", kekka)
  end
end

test = Test.new
test.dispHeikin(10, 8)

# Include和Extend的区别
module Foo
  def foo
    puts 'heyyyyoooo!'
  end
end

class Bar
  include Foo # include混入为实例方法
end

Bar.new.foo # heyyyyoooo!
Bar.foo # NoMethodError

class Baz
  extend Foo # extend混入成为类方法
end

Baz.foo # heyyyyoooo!
Baz.new.foo # NoMethodError

# 模块方法
module SuuchiModule
  def maxValue(x, y)
    if x > y
      return x
    else
      return y
    end
  end

  module_function :maxValue
end

SuuchiModule.maxValue(10, 8)

# 模块常量
module Math
  PI = 3.14
end

Math::PI

# 模块命名空间
module Foo
  module Bar
    def self.say
      p "Hi"
    end
  end
end

Foo::Bar.say

# 单例模块
module Item
  extend self
  
  def name
    p "i'm item"
  end
end

Item.name


(27)类和模块的区别
# 1、定义方式不同 class XX ... end, module YY ... end
# 2、类可以继承,模块不可以
# 3、类可以实例化(new),模块不可以
# 4、模块可以Mixin(include,extend),类不可以
# 5、类都是Class类的对象,模块都是Module类的对象


(28)Time类
# 初期化一个Time对象
Time.new        # 生成一个Time对象
Time.now        # 当前系统时间
Time.local 2009, 10, 1, 3, 54  # 2009 10/1 3:54
Time.local 2009, 10, 1# 2009 10/1
Time.utc 2009, 10, 1, 3, 54    # 使用UTC时间

# 解析日期字符串
require 'parsedate'
include ParseDate

text = "2009-11-12 04:05:00"
value = parsedate(text)  # [2009, 11, 12, 4, 5, 0, nil, nil]
t = Time.local(*value)   # 初期化一个Time对象

# 读取日期的各个字段
t.year    # 2009
t.month   # 11
t.day     # 12
t.wday    # 4: day of week: 0 is Sunday
t.yday    # 316: day of year
t.hour    # 4: 24-hour clock
t.min     # 5
t.sec     # 0
t.zone    # 时间带timezone

# arithmetic functions
t = Time.now
values = t.to_a   # [sec,min,hour,day,month,year,wday,yday,isdst,zone]

values[5] += 1           #  年加1
t = Time.local(*values)  # 设置时间

# 前后推算
now = Time.now           # 当前时间
past   = now - 10        # 10秒前
future = now + 10

past - now          # -10.0
sec = Time.now.to_i # 秒数
t = Time.at(sec)    # 转回time对象

# 比较
past <=> future         # -1: 小于, 0 相等, 1 大于
past < future           # true
now == now              # true

# 转成字符串
t = Time.now
t.to_s                          # "2013-08-07 09:56:23 +0800"

# 格式化输出
t.strftime("%Y-%m-%d %H:%M:%S") # "2009-09-23 19:56:30"
t.strftime("%H:%M")             # "19:56"
t.strftime("%I:%M %p")          # "07:56 PM"


(29)Date/DateTime类
require "date"

d1 = Date.new(2007, 5 ,30) # 2007年5月30日
d2 = DateTime.new(2007, 5 ,30, 16, 20, 45, 0.375) # 2007年5月30日16時20分45秒

dt = Date.today   # 今天
dn = DateTime.now # 现在时刻

day1 = Date.new(2007, 5 , -1) # 月底日期
day2 = Date.new(2007, 5 , -2) # 月底的前一天
分享到:
评论

相关推荐

    Ruby基础知识-数据类型.pdf

    ### Ruby基础知识-数据类型 #### 一、概览 在Ruby语言中,数据类型是程序设计的基本组成部分。本文档旨在详细介绍Ruby支持的各种基本数据类型及其使用方法,包括但不限于Number(数值)、String(字符串)、Ranges...

    ruby语言基础教程.ppt

    对于具备一定编程基础,工作1-3年的研发人员,本教程也是回顾和巩固Ruby基础知识的良好资料。 能学到什么: 1. Ruby语言的基本概念和特性,包括其脚本语言、面向对象、跨平台和开放源码软件的性质。 2. 如何使用...

    ruby基础学习资料

    在初学者的旅程中,掌握Ruby基础知识至关重要。这个“ruby基础学习资料”压缩包很显然是为那些想要入门或者深入理解Ruby的人准备的。让我们详细探讨一下Ruby的基础知识。 1. **变量与数据类型**: Ruby支持五种...

    ruby学习的源码

    1. **Ruby基础知识**: - 变量:Ruby支持局部变量、实例变量、类变量和全局变量,它们以不同的符号开头,如`@`、`$`等。 - 类与对象:Ruby是纯面向对象的语言,一切皆对象。类是创建对象的模板,可以包含属性...

    Ruby知识点笔记

    以上只是Ruby基础知识的一部分,实际上Ruby还支持块、 proc 和 lambda,模块(module)实现代码复用和类别(class)定义对象结构,以及强大的元编程能力,使得Ruby成为一个强大而灵活的开发工具。学习并熟练掌握这些...

    Ruby语言教程,常用指令详解附代码,开发资源项目详细介绍附代码带注释.txt

    下面是一些 Ruby 的基础知识和常用指令,以及一些开发资源和项目示例。 Ruby 基础知识 安装 Ruby 使用 RubyInstaller(Windows) 使用 rbenv 或 RVM(Mac/Linux) Hello World 程序 ruby puts "Hello, World!" 变量...

    Ruby基础知识之类

    法工厂方法在面向对象编程中,工厂方法是一种设计模式,用于创建对象,它提供了一种封装对象创建的方式,使得客户端代码无需直接实例化对象...在实际编程中,掌握这些基础知识对构建高效、健壮的Ruby应用程序至关重要。

    RUBY 教程.doc

    - **RUBY语言入门教程.pdf**:提供了RUBY基础知识的详细讲解。 - **http://download.csdn.net/detail/Sevk/659363**:CSDN上的RUBY教程下载地址。 - **http://www.box.net/shared/b2pre009psRubyQuickRef**:快速...

    Head First Ruby 英语原版

    - **游戏项目**:本书特色之一是通过构建一个完整的游戏项目来教授Ruby基础知识,让读者在实践中学习。 - **其他章节**:除了基础语法之外,还涵盖了更高级的主题,如面向对象编程、异常处理、文件操作等。 ##### 3...

    Ruby基础知识之数据类型

    字符串是编程中的基础类型,Ruby提供了灵活的方式来表示字符串。 1. 字符串可以用单引号或双引号定义。双引号支持字符串内插,意味着可以在字符串中嵌入变量或表达式。 2. 字符串内插格式为“#{expression}”。 3...

    Ruby基础教程(中文第4版)

    《Ruby基础教程(中文第4版)》是一本详尽介绍Ruby编程语言的权威指南,专为初学者和有一定编程经验的开发者设计。这本非扫描版的电子书以其清晰的排版和易于理解的内容,提供了学习Ruby 2.0版本的完美起点。Ruby是一...

    Ruby on Rail 基础知识 一张纸

    ### Ruby on Rails基础知识详解 #### 一、简介 在IT领域,Ruby on Rails(简称RoR或Rails)是一种流行的Web应用程序开发框架,基于Ruby语言。它遵循MVC(模型-视图-控制器)架构模式,使得开发高效且结构化。本篇文章旨在...

    ruby基础教程(中文第四版).epub

    排班精美,图文清晰。是市面上最适合初学者入门的 Ruby 教程,由 ruby 创始人亲自编写。...本书适合Ruby初学者学习参考, 有一定Ruby编程基础的读者若想再回顾一下Ruby的各知识点, 本书也能提供不少帮助。

    Ruby基础知识之方法、代码段

    Ruby作为一门动态脚本语言,其方法和代码块的定义、调用、传递等方面体现着语言的简洁性和灵活性。接下来,将详细阐述Ruby中方法...希望这些知识点能帮助理解Ruby编程中的一些核心概念,为编写Ruby代码打下坚实的基础。

Global site tag (gtag.js) - Google Analytics