Ruby 程序中,命令行使用 ARGV 这个 Ruby 预定义好的数组来获取从命令行传递过来的数据。
print_argv.rb
执行 print_argv.rb 文件
从参数里得到的数据都是字符串,因此如果希望进行运算时,需要对获得的数据进行类型转换。把字符串转换为整数,我们可以使用 to_i 方法。
9是一个Integer对象,是一个build-in type,python中你是无法对Integer type进行这种改造的,而ruby可以轻松实现。2>动态能力,ruby不仅是1>中提到的开放了所有的权限,更是连语法解析器都开放了一部分,于是你还可以参与构建语法树AST的一部分工作。
比方说,我们(python和ruby)都来动态的创造一个函数,耦合一个类实例的两个方法,需求是第一个方法执行的结果作为参数来调用第二个方法。
python中的做法就有点类似于java,利用反射api来实现。
obj = Klass()
def dynamic_method(_self, *args, **kwargs):
method1 = getattr(Klass, "func1")
method2 = getattr(Klass, "func2")
res1 = method1(obj, *args, **kwargs)
res2 = method2(obj, res1)
return res2
bind_attr(Klass, dynamic_method)
乍一看,似乎并没有什么问题,流程清晰。但是,我们似乎没有想过