除了动态类型,是什么让Ruby“比Java更灵活”?
发布时间:2020-12-17 01:55:04 所属栏目:百科 来源:网络整理
导读:我几乎一直在使用 Java,因为它刚出现,但在过去的五年中已经被烧毁了,即使做最简单的事情也变得多么复杂.我开始在我的精神科医生的推荐下学习 Ruby,呃,我的意思是我的同事(年轻,冷静的同事 – 他们使用Macs!).无论如何,他们不断重复的一件事是,Ruby是一种“
我几乎一直在使用
Java,因为它刚出现,但在过去的五年中已经被烧毁了,即使做最简单的事情也变得多么复杂.我开始在我的精神科医生的推荐下学习
Ruby,呃,我的意思是我的同事(年轻,冷静的同事 – 他们使用Macs!).无论如何,他们不断重复的一件事是,Ruby是一种“灵活”的语言,而不是像Java那样的老式,更加拙劣的语言,但我真的不知道这意味着什么.有人能解释是什么让一种语言比另一种语言“更灵活”?请.我对动态类型有所了解,可以看出这对简洁有什么好处. Ruby语法很漂亮.还有什么?动态打字是主要原因吗?
解决方法
动态类型并没有接近它.举一个很好的例子,Ruby在许多情况下使元编程变得容易.在Java中,元编程要么是痛苦的要么是不可能的.
例如,采用Ruby通常的方式声明属性: class SoftDrink attr_accessor :name,:sugar_content end # Now we can do... can = SoftDrink.new can.name = 'Coke' # Not a direct ivar access — calls can.name=('Coke') can.sugar_content = 9001 # Ditto 这不是一些特殊的语言语法 – 它是Module类的一个方法,并且易于实现.这是attr_accessor的示例实现: class Module def attr_accessor(*symbols) symbols.each do |symbol| define_method(symbol) {instance_variable_get "@#{symbol}"} define_method("#{symbol}=") {|val| instance_varible_set("@#{symbol}",val)} end end end 这种功能可以让您在表达程序方面获得很多灵活性. 很多看起来像语言特性(以及大多数语言中的语言特性)都只是Ruby中的常用方法.再举一个例子,这里我们动态加载其名称存储在数组中的依赖项: dependencies = %w(yaml haml hpricot sinatra couchfoo) block_list %w(couchfoo) # Wait,we don't really want CouchDB! dependencies.each {|mod| require mod unless block_list.include? mod} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |