Ruby学习笔记(一)

最近在Codecademy上把Ruby的基础知识过了一遍,记录了一些笔记,比较零散。

0.puts print 都是将内容输出,区别是puts换行。

   puts "#{var}"  双引号中用#{var}输出变量,也可以直接输出数组,hash,甚至可以调用函数
  如下是注释的写法,注意=begin和=end要写在行首。
=begin
    这是整段的注释
=end

#这是单行注释
  注意if,while,函数,类等最后都要加end
  在调用函数时可以不用加中括号(),即可以 foo(bar) ,也可以写成 foo bar
  if(0)  == true。ruby里唯一的两个non-true value 是 false, nil
#这样定义数组
my_arr = [1,2,3,4]
#这样定义hash
my_hash = {
	"first"=>1,
	"second"=>2
}
  hash[undefine-key] == nil  获取hash或数组中一个没有定义的key的值,不会出错,会返回nil。
  **是幂操作符。 2**3 == 8
  ruby中没有自增(++)自减(--)操作符
  函数定义时,可在参数前加*号代表是个数可变的参数,例 my_func(*params) params表示接受多于1个的参数
  ruby中可以使用分号(;),在一行内写多条语句,比如  class MyClass; end
  ruby中可以改变一个常量的值..但你会受到一个警告
  整数可以使用下划线分隔开,便于阅读,比如  1_000_000 == 1000000
  if/elsif 中的elsif 不能写成else if 或 elseif
  
1.gets.chomp 等待并得到用户的输入,gets就能得到输入内容了,用chomp能消除多余的空格、

2.函数后可以跟三种符号
  !  代表破坏性的方法,相当于引用。比如 "eric".capitalize! "eric"会变成"Eric",不加!,"eric"自身不会变,只是产生一份拷贝
  ? 表示这个函数会返回一个布尔值
 = 表示这是一个set方法

3.  .. 和 ...
#两个点 .. 表示 [1, 15]; 三个点 ... 表示 [1, 15)
for num in 1..15
  puts num
end

4.do...end 和 {...} 可以互相替换。比如 loop{} 或 .each do; end 等

5.Hash.new(default-value)。可以新建一个带有默认值的hash

6.组合比较符(combined comparison operator, spaceship operator)  <=>
如果将要进行比较的第一个操作数等于第二个操作数,将返回0;如果大于则返回1,;小于返回-1。

7.sort函数
books = ["Charlie and the Chocolate Factory", "War and Peace", "Utopia", "A Brief History of Time", "A Wrinkle in Time"]

# To sort our books in ascending order, in-place
books.sort! { |firstBook, secondBook| firstBook <=> secondBook }

# Sort your books in descending order, in-place below
books.sort! { |firstBook, secondBook| secondBook <=> firstBook}
对传给排序方法的代码块进行排序操作必须返回1,0,或-1。如果第一个参数要排在第二个之前,那么要返回-1,反之则返回1,如果两者相等,即谁也不在谁前面,那么就返回0。

8.symbol 符号 eg. my_symbol = :string; 
symbol适合代替字符串做hash中的key,原因:
-它们是不变的,创建过后就不会被改变;
-任意一个symbol出现之后就只有一份拷贝,所以它们节省内存
-基于以上两个原因,使用symbols代替strings做hash的key是更高效快速的

symbol和string的相互转换:
"string".to_sym"string".intern
:symbol.to_s

symbol不是轻量的字符串
puts "string".object_id
puts "string".object_id
puts :symbol.object_id
puts :symbol.object_id
#this output:19984220 19984020  352488 352488

自ruby1.9之后,hash有了新的语法  
new_hash = { one: 1, two: 2, three: 3} 
变化有两点,不用再用 => 符号了,冒号放到后面去了

symbol能当做一个函数名的引用  eg. object.respond_to?  如果一个函数接受该object当参数,就返回true
 [1,2,3].respond_to?(:push)  
 #=> true : array.push    
 [1,2,3].respond_to?(:to_sym)  
 #=> false

疑问:symbol如何比较大小的
grades = { alice: 100, bob: 92, chris: 95, dave: 97 }
grades.select { |k,v| k > :c }
# ==> {:chris=>95, :dave=>97}

9.hash的遍历
my_hash.each {|key, value|}
my_hash.each_key {|key|}
my_hash.each_value {|value|}

判断hash中某个key是否已设置: 1. hash[key].nil?   2. hash[key] == nil

10.ruby中的switch case:
case language
when "JS"
    puts "Websites!"
when "Python" then puts "Science!"
else 
    puts "I don't know!"
end

11.ruby不是执行速度最快的语言,但它是易于让你使用时感到愉悦的
ruby_is_eloquent = true
ruby_is_ugly = false
puts "Ruby is eloquent!" if ruby_is_eloquent
puts "Ruby's not ugly!" unless ruby_is_ugly
#this output:
#Ruby is eloquent!
#Ruby's not ugly!
Ruby will expect an expression followed by if followed by a boolean
unless与if相反

12.条件赋值运算符 ||= 只有当一个变量是nil的时候才会被赋值成功

13.如果在函数最后没有显式的return语句,ruby的方法会默认返回最后一个表达式的值
举例说,在JavaScript中,你没有显式的说明要返回什么,那么它将返回undefined;
对Python来说,默认的返回值是None;
但是Ruby是有一些不同的,Ruby的方法将返回最后一个表达式的值。

14.  .upto  .downto   eg:
95.upto(100)
"G".downto("A")  {|letter| puts letter}
15.concatenation operator(<<)  能代替 .push(Array)函数 ,能连接字符串
[1,2,3] << 4
#=> [1,2,3,4]    
"hello" << "world" 
#=> "hello world"
要注意的是,<<是改变的自身的值

字符串连接或插入,可选的方法很多
age = 26
"I am " + age.to_s + "years old"
"I am" << age.to_s << "years old"
#以上两种较复杂,not the ruby way, 应该选用如下方式
"I am #{age} years old"



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值