变量声明: name = "juno" (Ruby中不需要结尾分号,Ruby是动态语言,所以不需要声明变量的类型,Ruby对空格不敏感)
变量名声明规则: 见名知意原则,单词之间用下划线连接,尽量不要使用其他符号(按照开发社区习惯)
算术运算符: n**m n的m次方, 其他+-*/% 跟其他语言无区别
打印:print 和 puts 区别在于 puts 有\n换行符。 例:print "something" puts "something"
方法:Ruby中一切皆是对象 。例 name.length name变量的长度 同样 "juno".length也是可行的 ,
.reverse是取反 , .upcase取大写,downcase 取小写, "juon".downcase.reverse.upcase还能这样。
注释:单行 # ; 多行 =begin =end 注意 =begin和=end必须是独立一行并而是顶格的
打印中使用表达式:
print "What state or province are you from?"
state = gets.chomp ( gets代表从获控制台取输入流,.chomp得到的内容输出时后面不带空格和换行,gets默认最尾后添加 \r\n )
state.upcase! (最后面加 叹号 ! 代表修改自身值 相当于 state = state.upcase)
puts "Your name is #{first_name} #{last_name} and you're from #{city}, #{state}!" (#{变量名} 取值拼接)
"#{string[0].upcase}#{string[1..-1]}" 看起来有点类似于EL表达式的用法
Integer类型: value = Integer("123")
控制流: if elsif else end 注意: elsif 不是elseif这点和java不同 if 后面的逻辑表达式不需要用括号括住,最后一定 要加 end .
逻辑非的另一种判断法 。例:if !true 可以这样声明 unless true
逻辑运算符: != , == , < , > , <= , >= , && , || , ! .
付值运算符: += , -=
逻辑结果方法,参数传入 ,用于IF? :
string_name.include? "d" string_name中是否include(包含) ? “ d”(?号后跟传入参数),一般来说这种用法的方法返回结果都是 true or false
if user_input.gsub!(/s/,"th") 替换 因为有!号 所以把原来的值改变 gsub会返回一个字符串,和是否有字符被替换
if 表达式 then end #当写在一行时 需要用then
循环:
while或者until/ xxxxx 可以省略do关键字,原因不明 (while 是只有true才循环,until是只有false才循环)
xxxxxxxx
end
while或者until xxxxx do (while 是只有true才循环,until是只有false才循环)
xxxxxxxx
end
for num in 1...10 (三个点是不包含10,两个点是包含最高位)
end
loop //自动loop循环,不断循环,直到break 中的条件满足才结束,break可以是多个
{ 可以用do关键字代替
xxxxx
break if xxx==true 遇到break关键字,如果满足,跳出循环
next if xxxx==true 遇到next
} 可以用end关键字代替
变量循环:
object.each { |item| #Do something} 一切皆是对象,直接在变量使用 .each {} 即可开始一个变量循环,如数组
object.each do |item| #Do something end |xxxx| 双||是一个占位符, xxxx代表每个循环对象的名称
10.times{} 这个就像一个for 简化的循环, 循环10次
(1..10).each 又一种for的简写
数组:
my_array = [1,2,3,4]
my_array[0] 访问索引从0开始
my_array.each do |obj| end
my_2d_array = [ [11,1] , [2,22] ] 多维数组
哈希:键值对集,相等于java的MAP
pets = Hash.new / pets = { "111" => "222" , "333" => "444"}
pets = Hash.new(0) 意思是每个刚分配的键值对的值默认为0 也可以是其任何类型
pets["ssss"] = "sssss"
pets.each { |key,value| 在each中 { |x,y| 不能换行,似乎是这样的
puts "#{key} : #{value}"
}
pets= pets.sort_by { |key,value | 排序
value
}
[1,2,5,7,98,4].sort! 升序排序
frequencies.reverse 反转
方法声明:
1. 头部: def (define定义的缩写) , 方法名 , 参数 def xxxxx ( n,x)
2.主体:代码,缩进两格
3. 返回(可选):return
4.结尾:end
提示:一个约定,如果方法是返回一个boolean 请在方法名尾部加一个部号如:xxxxx?(n)
方法调用:
直接使用方法名 如 xxxxxxx(xx) 如果Ruby找不到这个方法,会返回NameError,括号不是必填的,但填上增加可读性
示图参数:splat arguments
在参数前面加一个 * 号 ,很好理解,相当于java的可变参数,必须在方法参数中的最后一个。
字符串的特殊用法:
一个字符串如:"abc" 要获取第一个字符,可以这样 "abc"[0] , 要获取第二位到结尾可以这样 "abc"[1..-1] 好神奇
对象比较:
两个对象之间进行比较,使用:A <=> B , 如果A等于B 返回0,A大于B 返回 1,A小于B 返回-1.