在codecademy上开始玩ruby了

1.数据类型:boolean,string,number
变量直接用即可,不用声明(“拿来主义”)
运算符:+ - * / ** % == != && ||!> >= < <= 等
输入语句:gets/gets.chomp(后者不包括"/n")
输出语句:puts/print(后者不包括"/n") 用#{变量}输出对应变量的值
 
2.每个量都是object 都有method
string的几个方法:length reverse upcase downcase(小写) capitalize(首字母大写其它都小写)
!放在方法后表示在原有的string做更改生效
include?方法返回布尔型结果 表示是否包含某个量
split(somechar) 表示按照somechar分割
.to_s方法表示转化为string形式
 
3.单行注释 # 
多行注释 
=begin
add sth here
=end
 
4.if判断句:条件处不用加括号
建议空两格后写"then"操作
最简单的if句    puts "sdf" if 2>3   (不用写end)
多行最简单if句子  
if 2>3
    puts "sdfds"
end
完整的if判断句
if
elsif
else
end
用unless表示“如果不”, 例如if somevalue 等价于 unless !somevalue   unless于if用法格式相同
?:操作符相当于一个if else end语句
 
5.循环
while-end
until-end
for-end   其中for num in a..b 表示[a,b)  for num in a...b表示[a,b]
loop-do-end 中间使用next语句类似于continue的效果
 
6.数组
遍历:  .each方法  array_name.each {|x| puts x}    
            .times方法
输出:puts array_name 则输出所有元素
数组的元素不一定要为同一种类型,可以混合
 
Hash的使用
my_hash=Hash.new
my_hash=Hash.new(n)赋初值为n
my_has={idxA=>valA, idxB=>valB}
hash的输出  each方法: my_hash.each {|x| puts x}     my_hash.each {|k,v| puts my_hash[k] }
sort_by{|k,v| v}按照v降序排序
reverse方法将数组倒置
 
7.函数定义
def method_name(paralist)   #若没有参数,则括号可以省略  方法名字中可以有“=”
    #do sth
end
返回值类型:可以使用return语句  默认返回最后一个表达式的值 eg. def add(a,b) a+b
block和method的区别:method是block的抽象
 
8.排序
.sort方法  后接代码块时作为比较参数  eg:
books=["what", "me"]
books.sort!{|x,y| x<=>y}   #升序
books.sort!{|x,y| y<=>x}  #降序
A<=>B是做比较,A>B时候返回1,==时返回0, <时返回-1
关于nil:若hash中某个key不存在则访问它时返回nil    当然如果用my_hash=Hash.new(n)的方式则默认值为n 返回n
Ruby中只有false和nil的值不是true   false表示“假”   表示“什么都没哟”
 
9.Ruby符号(symbol)
相同值得string,其object_id未必相同(类似于java中的对象的特点)
但symbol的object_id一定唯一     object_id类似于指针
symbol语法  冒号开头 eg.  :my_symbol
symbol用于hash中,因为symbol是唯一的,且一旦创建就不可以改变,而且是快速的
symbol于stringd的转化:  .to_s    .to_sym或.intern
注:在ruby1.9的Hash中,使用冒号(colon)后置的方式,且不使用rocket(=>)的方式来初始化hash 这与js和python中类似
eg.  new_hash={one:1 , two:2}
但是这样一来,key值就不能是多个字符了,诶
Hash的几个method   .each_key    .each_value     my_hash[idx].nil?方法返回是否存在idx
 
10.||=操作符(conditional assignment)
若变量为nil 则||=后为新值
反之,原有值不变
&&操作与||操作时短路操作
.times  .each  .upto  .downto方法  都可以用来做循环操作
eg.  "L".upto("P") {|x| puts x}  表示输出从L到P的所有字母
.respond_to?方法返回“一个对象里是否有某个方法可以使用”的真值
.push方法的简写:用 "<<"符号  eg.  [1,2,3] << 4
(但是在拼接string的时候注意,如果有原本不是string的量要先用to_s转化;更简单的方式是用#{})
.collect方法(等同于.map):在原有block基础上做更改  eg. my_nums=[1,2,3]  my_nums.collect!{|x| x**2}   则my_nums变为[1,4,9]
yield关键字:临时”屈服“,即从当前行开始执行一段插入的代码,就像是”走神“了一样
blocks不是对象(object)
proc是保存了的block,可以复用  使用proc时,小括号中用&proc_name即可,  lambda也是一样的格式使用
.call方法:proc的一个方法,直接调用proc中的代码
lambda关键字:lambda {puts "Hi"} 等同于 Proc.new{puts "Hi"}    lambda检查传入的参数而proc不检查   在函数中调用lambda后会继续执行函数体,而proc则不会回去继续执行,而是return掉了    (相当于一个是continue一个是break?有点这个味道)
.select方法  eg. nums=[1,2.3,  9]   ints=nums.select{|x| x.is_a?Integer}  则ints=[1,9]
 
11.ruby类
最简式 class NewClass
            end
成员变量:用@+名字表示
实例化一个对象:object_name=ClassName.new(paralist)
变量作用域:  $ global variable(全局变量)    @instance variable(实例变量)    @@class variable(类变量,类似于静态变量)
inheritance(继承):使用"<"符号  eg. class subclass < superclass
子类可以覆盖父类中的方法(override)
关键字super可以用来调用父类中的方法或者变量
ruby是单继承的,一个类不能有多于1个的父类
类的静态方法: eg.  class Machine
                                    def Machine.hello    #用类名.方法名
                                        puts "hi"
                                    end
                                end
private/public关键字:实现封装,写在方法定义的前面一行, 默认的方法权限为public  但若在pivate限定过的方法后面的方法,若不加以说明则为private
attr_reader/attr_writer/attr_accessor (后者等于前两者相加)
module(模块):和class很像 但不能实例化,不能有子类,可以用于存储。(类似于java中的interface)
module中定义的方法,使用类名.方法名 或者 self.方法名   #???
域操作符   eg. Math::PI
加入库: 用require +库名  eg. require 'data'
include关键字的效果是:你可以不再写::(作用域限定符)  eg.   include Math  #(不加引号)
mixin(混入):module可以include进class中使用,是的类的实例可以使用module中的方法;而当使用extend替代include时候,表示在类的级别上使用module的成员,方法
ruby中允许用1_000_000表示1000000

Ruby语言学习笔记的更多相关文章

  1. ruby语言学习笔记2

    ruby学习笔记2  (摘自<ruby程序设计语言教程(中文版)>.pdf,全书25页) 1.同一个问题ruby有多个解决方案,途径 ruby之父:松本行弘(Matz),1993年创立 r ...

  2. HTML语言学习笔记(会更新)

    # HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...

  3. 2017-04-21周C语言学习笔记

    C语言学习笔记:... --------------------------------- C语言学习笔记:学习程度的高低取决于.自学能力的高低.有的时候生活就是这样的.聪明的人有时候需要.用笨的方法 ...

  4. 2017-05-4-C语言学习笔记

    C语言学习笔记... ------------------------------------ Hello C语言:什么是程序:程序是指:完成某件事的既定方式和过程.计算机中的程序是指:为了让计算机执 ...

  5. GO语言学习笔记(一)

    GO语言学习笔记 1.数组切片slice:可动态增长的数组 2.错误处理流程关键字:defer panic recover 3.变量的初始化:以下效果一样 `var a int = 10` `var ...

  6. Haskell语言学习笔记(88)语言扩展(1)

    ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...

  7. Go语言学习笔记十三: Map集合

    Go语言学习笔记十三: Map集合 Map在每种语言中基本都有,Java中是属于集合类Map,其包括HashMap, TreeMap等.而Python语言直接就属于一种类型,写法上比Java还简单. ...

  8. Go语言学习笔记十二: 范围(Range)

    Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...

  9. Go语言学习笔记十一: 切片(slice)

    Go语言学习笔记十一: 切片(slice) 切片这个概念我是从python语言中学到的,当时感觉这个东西真的比较好用.不像java语言写起来就比较繁琐.不过我觉得未来java语法也会支持的. 定义切片 ...

随机推荐

  1. LOJ2542 PKUWC2018随机游走(概率期望+容斥原理)

    如果直接dp,状态里肯定要带上已走过的点的集合,感觉上不太好做. 考虑一种对期望的minmax容斥:其中Max(S)为遍历完S集合的期望步数,Min(S)为遍历到S集合中一个点的期望步数.当然才不管怎 ...

  2. Tyvj1038 忠诚 (线段树)

    [Tyvj1038]忠诚 线段树   题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是 ...

  3. Eclipse构建项目时"An internal error occurred during: "Building workspace". Java heap space"

    出现这个错误,eclipse 会卡死,以及自动退出 解决方案 工程根目录 找到项目中.project文件 删除这两处   第一处:  <buildCommand>          < ...

  4. 【BZOJ1228】[SDOI2009]E&D(博弈论)

    [BZOJ1228][SDOI2009]E&D(博弈论) 题面 BZOJ 洛谷 题解 这种打表找规律的题目真的不知道可以说什么好啊... #include<iostream> #i ...

  5. BZOJ 1565 [NOI2009]植物大战僵尸 | 网络流

    传送门 BZOJ 1565 题解 这道题也是个经典的最大权闭合子图-- 复习一下最大权闭合子图是什么? 就是一个DAG上,每个点有个或正或负的点权,有的点依赖于另外一些点(如果选这个点,则被依赖点必选 ...

  6. [JSOI2007]文本生成器(AC自动机,DP)

    题目链接: 洛谷 LOJ BZOJ 题目大意:给定 $n$ 个只含大写字母的串(称为可读串),问有多少种只含大写字母的长为 $m$ 的串,包含至少一个可读串. $1\le n\le 60,1\le \ ...

  7. linux运维之分析日志相关命令(1)

    一.分析日志 1.查看有多少IP访问 awk '{print $1}' log_file|sort|uniq|wc -l 2.查看某一个页面被访问的次数 grep "/index.php&q ...

  8. spring.net框架配置和使用

    spring.net框架学习笔记 spring.net框架是用于解决企业应用开发的复杂性的一种容器框架,它的一大功能IOC(控制反转),通俗解释就是通过spring.net框架的容器创建对象实体,而不 ...

  9. 洛谷P3227 切糕

    最小割模板. 题意:你要在一个三维点阵的每个竖条中删去一个点,使得删去的点权和最小. 且相邻(四联通)的两竖条之间删的点的z坐标之差的绝对值不超过D. 解: 首先把这些都串起来,点边转化,就变成最小割 ...

  10. Python学习笔记 - 实现探测Web服务质量

    #!/usr/bin/python3# _*_ coding:utf-8 _*_import sys, osimport timeimport pycurl url = "https://d ...