Ruby中动态类型的优点和缺点是什么?

Cha*_*han 1 ruby

假设我有一个名为Tool的类:

class Tool
    def initialize( name, weight )
        @name = name
        @weight = weight
    end

    attr_reader :name, :weight
    attr_writer :name, :weight

    def to_s
        name + " " + weight
    end
end
Run Code Online (Sandbox Code Playgroud)

Tool如果我愿意,这可以是一个人:

hammer = Tool.new( "Hammer", 14.5 )
pp = Tool.new( "first", "last" )
Run Code Online (Sandbox Code Playgroud)

它很灵活,因为我可以创建一种类型并用于多种用途.但是,如果用户不小心弄错了,肯定会导致错误的数据类型,我们如何跟踪问题呢?
这个想法有哪些优点和缺点?

Mar*_*c W 6

Ruby根本没有松散的类型.恰恰相反,它的输入非常强烈.但它也是动态类型的(与静态类型相反,例如C++和Java).你应该对差异做一些阅读.PHP是松散类型语言的一个例子.

回答你的问题,如果没有采用测试驱动开发,动态类型的语言(如Ruby和Python)很难以任何复杂性编写.也就是说,首先尝试编写测试以解释期望并定义类和API,以便人们只需使用常识就可以知道如何使用它们.如果您真的担心客户端将无效类型传递给您的方法,那么如果类型不正确,您始终可以键入检查并抛出异常.但是,这通常不是在系统范围内完成的.