zoukankan      html  css  js  c++  java
  • 从python入门ruby

    1、Ruby的函数可以不使用括号

    def h(name)
        puts "hello #{name}"
    end
    
    h "jack"

    2、python可以直接访问实例的属性,ruby不行,且Ruby的类名必须以大写字母开头

    为什么python需要self:假如创建了一个类MyClass,实例化MyClass得到了MyObject这个对象,然后调用这个对象的方法MyObject.method(arg1,arg2) ,这个过程中,Python会自动转为Myclass.mehod(MyObject,arg1,arg2)

    self在Python里不是关键字。self代表当前对象的地址。 

    >>> class greeter:
    ...     def __init__(self,name):
    ...             self.name=name
    ... 
    >>> g=greeter("jack")
    >>> g.name
    'jack'
    >>> 
    class Greeter
       def initialize(name)
         @name = name
         end
       end
     => :initialize 
    g = Greeter.new("jack")

      无论是g.name还是g.@name都会报错。在Ruby中,实例变量是被隐藏起来的,但是可以通过为类添加访问属性的方法来获取属性值。把一个类打开然后改变它,会对以后生成的甚至是已经生成的对象产生即时效果。 

     class Greeter
       attr_accessor :name
       end
     => nil 
    g.name
    => "jack"

      attr_accessor 会自动为我们定义两个新的函数, name 用来读取变量的值, name= 用来给变量赋值。在改变了类之后,我们之前创建的Greeter的实例g也被改变了,能够通过g.name访问name属性了

    3、ruby并不是严格缩进的,下面这样的代码也可以运行

    class MegaGreeter
    attr_accessor :names
    
    def initialize(names = "World")
      @names = names
    end
    end

    4、ruby判断真值时,只有 false 和 nil 当做假值。其余一切皆为真(包括 0、 0.0、 "" 和 [])。

    a=0
    if a
       puts "yes"
    else
       puts "no"
    end
    
    =>yes

    5、优雅的循环

    @names.each do |name|
      puts "Hello #{name}!"
    end
    for name in names:
        print("Hello %s!"%name)

    Ruby 的方法对比来看就更清爽,所有的清理工作都被隐藏在 each 函数里了, 您只需要告诉它您想做什么。在 each 函数内部,实际上会去自动调用 yield "Albert"yield "Brenda"yield "Charles",等等。 

    6、ruby不限制函数所支持的参数类别。 如果有人写了一个新的类,只要它像其他列表类一样回应 join 这个函数, 那它就可以被相应的其他函数所使用。 

    if @names.respond_to?("join")
    if callable(getattr(greeter,"join",None)):

    7、“如果这是启动脚本”

    if __name__ == '__main__':
    if __FILE__ == $0

    8、ruby的表达式和语句没有区别。任何表达方法都有返回值

    9、类似 Python, 从 Ruby 2.0 开始,可以使用关键字参数定义方法

    10、nil is a object

      def test_nil_is_an_object
        assert_equal true, nil.is_a?(Object), "Unlike NULL in other languages. 
                                                But, like None in python."
      end
  • 相关阅读:
    idea 导入spring 源码注意的问题
    如何在plsql/developer的命令窗口执行sql脚本
    使用babel把es6代码转成es5代码
    解决es6中webstrom不支持import的一个简单方法
    nodejs npm insttall 带不带-g这个参数的区别
    nodejs 喜欢报cannot find module .....的简单解决方案
    用npm安装express时报proxy的错误的解决方法
    angularjs的验证信息的写法
    Emacs as a Python IDE(转)
    消息摘要java.security.MessageDigest
  • 原文地址:https://www.cnblogs.com/luozx207/p/9976067.html
Copyright © 2011-2022 走看看