zoukankan      html  css  js  c++  java
  • [Rails学习之路]初识Ruby(一)

    Ruby是一门动态的、强类型的、纯面向对象的编程语言。它和Python非常相似,但比Python面向对象更加彻底、使用更加灵活、语法更加复杂、也更为有趣。
    抛开做事情到底应该有多少种方法这个问题,我相信不止我一个人是为了学习Rails才学习Ruby。每当我拿起Django、Flask或者Python的时候,就会听到有人在说Ruby on Rails。
    于是我决定今天开始学习Rails。第一天先来简单学习一下Ruby。

    数据类型

    首先,因为Ruby的纯面向对象的特征,不存在Java中的“原始数据类型”这种说法。Ruby中内置的几种数据类型也是对象,和其他的对象并无差别。

    • 数值Numeric

      包括整数Int和浮点Float

    • 字符串String

      • Ruby中的字符串也有单引号、双引号、三引号这三种包裹的方式。
      • Ruby中不存在字符类型。只有长度为1的字符串。
      • 求字符串长度?str.length而不是len(str)
      • 比较字符串的方法和Java近乎相反。==比较字符串的值,而equal?比较对象是否相同。
    • 符号Symbol

      变量、方法、类都可以表示成符号。如::method:variable

    • 布尔Boolean

      取值为truefalse。与Python不同的是,只有falsenil才为假,其余均为真,包括0''[]等。

    • 数组Array

      [1, 'apple', false]

    • 字典Hash

      ['Jan'=>1, 'Feb'=>2, ...]

    类型之间的转换也是面向对象的风格,如str.to_i,而不是int(str)。当然to_fto_s之类的也是有的。

    奇怪的符号

    以前我一直觉得Objective-C差不多把键盘上的符号都用光了。现在我才知道,和Ruby相比算是小巫见大巫了。

    • $var:表示全局变量。如$stdin

    • @var:表示实例变量。

    • @@var:表示类变量。

    • :var:表示符号变量。

    • #{var}:表示在字符串中的占位。如:

      name = "world"
      puts "Hello, #{name}!"
      
    • %var:用于格式化字符串。与Python用法类似。上面的例子可以改写为:

      puts "Hello, %s" % name
      

    除此之外,还有一个更奇怪的,虽然没用什么符号,但在Ruby中,首字母大写表示常量。

    输入输出

    Ruby中putsprint常用来输出。
    puts在输出后会自动换行,而print不会。
    在输出字符串时也可以拼接:

    a = "Hello, "
    b = "World!"
    puts a + b
    

    在Python通常使用逗号,但Ruby中逗号会产生换行。

    使用gets获取用户输入,chomp用来去除多余的空行。例:

    print "What's your name? "
    name = gets.chomp
    print "How old are you? "
    age = gets.chomp.to_i
    

    读写文件的操作与Python大同小异。常用的方法有openreadwriteclose等。

    判断、循环和选择

    判断语句有ifunlessif not)。
    Ruby中有三元运算符x ? y : z,不需要用别扭的y if x else z
    循环语句有whileuntilwhile not)和loopwhile true)。
    还有传统的for循环:for x in list
    Ruby风格的写法:list.each do |x|
    另一种写法:list.each {|x| ...}

    控制循环的关键字有:

    • break
    • next (相当于continue)
    • redo 重做该次循环
    • retry 重做循环

    我不知道最后这俩有什么用?

    选择语句的例子:

    case a
    when 1..5
    	puts "It's between 1 and 5"
    when 6
    	puts "It's 6"
    when String
    	puts "You passed a string"
    else
    	puts "You gave me #{a} -- I have no idea what to do with that."
    end
    
  • 相关阅读:
    Redundant Paths 分离的路径(边双连通分量)
    bzoj2208 [Jsoi2010] 连通数(tarjan点双连通分量 // dfs)
    [bzoj3331] [BeiJing2013] 压力(tarjan 点双连通分量)
    [ BZOJ1123 ] BLO(tarjan点双连通分量)
    bitset小总结
    牛客328B Rabbit的工作(1)
    # Codeforces Round #529(Div.3)个人题解
    HDU5957 Query on a graph(拓扑找环,BFS序,线段树更新,分类讨论)
    istringstream()函数的用法
    codeforces 1077F1
  • 原文地址:https://www.cnblogs.com/CodeCabin/p/4097677.html
Copyright © 2011-2022 走看看