加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

除了动态类型,是什么让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}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读