`
kevin_gzhz
  • 浏览: 60391 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

请教Ruby中构造函数的问题

阅读更多

 

      我刚学Ruby没有几天,有个问题想请教一下高手:有学习资料说Ruby里没有方法的重载这一说法。不过我现在遇到这个需要像在java里写多个构造器的情况下该怎么实现。

class Abc
  #1
   def initialize()  
   end 
  #2
  def initialize(name, &block)  
    @name = name 
    @block = block 
  end  
  
   def getText
        "this is test"
   end

   def getTax(amount)  
    "#@name on #{amount} = #{ @block.call(amount) }"  
  end  
end

#3
method1 = Abc.new()
method1.getText

#4
method2 = Abc.new("Sales tax") { |amt| amt * 0.075 } 
puts method2.getTax(100)  

   为什么代码块#1和#2同时存在时,#3可以执行,#4就不可以,只存在#2和#4时,#4就可以执行,要在同一个类中实现像java那样的通过不同的构造器构造不同的实例,在Ruby里应该怎么实现,请各位大侠给的答案!!

分享到:
评论
3 楼 ye_jian_hui 2008-07-02  
ruby不支持方法重载,因为ruby是动态类型语言,所以方法重载可以通过缺省参数值来实现
2 楼 kevin_gzhz 2008-07-02  
还请@simohayha说明一下我上面那种写法失败的原因,还有代码instance_eval &block      与 method1 = Abc.new {}   有什么联系?谢谢!
1 楼 simohayha 2008-07-02  
你可以这样来写:

class Abc
  attr_accessor :name,:block
   def initialize(&block)  
    instance_eval &block  
   end 
  #2
  
   def getText
        "this is test"
   end

   def getTax(amount)  
    "#@name on #{amount} = #{ @block.call(amount) }"  
  end  
end

#3
method1 = Abc.new {}
p method1.getText

#4
method2 = Abc.new do
  self.name="Sales tax"
  self.block=proc { |amt| amt * 0.075 }  
end
p method2.getTax(100)  

相关推荐

    ruby实用函数和实例

    在Ruby中,有许多实用的内置函数和方法,这些工具极大地提升了开发者的效率。在这个主题下,我们将深入探讨Ruby的一些关键函数和实例,以及如何在实际编程中应用它们。 首先,我们关注的是"使用Ruby语言实现自动...

    ruby 中文文档 必备资料

    在Ruby中,异常类是继承自`StandardError`的,你可以自定义异常类来处理特定类型的错误。 Ruby on Rails是Ruby最著名的Web开发框架,它遵循MVC(模型-视图-控制器)架构模式。这份文档可能也涵盖了Rails的相关内容...

    ruby中文文档.chm

    在Ruby中,一切都是对象,包括基本的数据类型如字符串、数字和布尔值。这种特性使得Ruby在处理复杂问题时具有很高的灵活性。文档中将详细讲解Ruby的基础语法,如变量声明、控制结构(条件语句、循环)、函数和方法...

    ruby中英文api

    在Ruby中,API主要体现在类、方法、模块和库的形式上,它们提供了丰富的功能供开发者使用。Ruby的官方API文档详细记录了每种内置类型、类、模块、方法以及它们的使用方式。"ruby中英文api"资料集可能包含了对这些...

    ruby中文教程,从基础到深入的让你学习ruby

    变量在Ruby中有四种类型:局部变量(以小写字母或下划线开头)、实例变量(以`@`开头)、类变量(以`@@`开头)和全局变量(以`$`开头)。数据类型包括字符串、数字、布尔值、数组、哈希等。控制结构包括条件语句(如...

    ruby中文文档中心资料

    在Ruby中,Web开发最知名的框架是Ruby on Rails,它遵循MVC(模型-视图-控制器)架构模式,简化了Web应用的开发。Rails提供了许多约定优于配置的特性,使得开发者可以更快速地构建功能丰富的网站。 总结起来,"ruby...

    Ruby中文教程及相关源代码

    3. **函数与方法**:Ruby中的函数定义和调用,块和 Proc 对象,以及方法的定义、重载和作用域。 4. **面向对象编程**:Ruby是纯面向对象的语言,讲解类的定义、继承、模块(Module)的使用,以及对象创建和消息传递...

    ruby中文教程(源代码)

    - 函数与方法:Ruby中的函数被称为方法,可以定义在类或模块中,支持块(block)和 Proc 对象。 2. **面向对象编程(OOP)** - 类与对象:Ruby是纯面向对象的语言,一切皆对象。你可以创建自定义类来封装数据和...

    ruby中文手册 chm

    用户指南通常会从基础开始介绍Ruby,包括变量、数据类型、控制结构(如if语句、循环)、函数、类与对象、模块、继承等。此外,还会涉及异常处理、文件操作、正则表达式和字符串处理等内容,这些都是Ruby编程的基础...

    Ruby-PyCall从Ruby语言调用Python函数

    假设你有一个Python函数`add(a, b)`,可以在Ruby中这样调用: ```ruby def_module(:MyPythonModule) do def add(a, b) PythonObject.new('add', a, b).send(:__) end end result = MyPythonModule.add(3, 4) ...

    ruby中文文档

    3. **块、 Proc 和 Lambda**:Ruby中的块是一段可以被传递和执行的代码,类似于其他语言中的闭包或匿名函数。Proc和Lambda是两种表示代码块的数据结构,它们可以存储和调用代码块,而且在行为上与函数类似。 4. **...

    Ruby中文文档.zip

    Ruby,一种简单快捷的面向对象(面向对象程序设计)脚本语言,在20世纪90年代由日本人松本行弘(Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License。它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada以及 Lisp ...

    Ruby基础语法+Ruby变量与数据类型+Ruby控制结构+Ruby函数与方法+Ruby面向对象编程等全套教程

    Ruby函数与方法 Ruby面向对象编程 Ruby模块与包 Ruby错误处理 Ruby文件与I/O操作 Ruby正则表达式 Ruby网络编程 Ruby数据库交互 Ruby测试框架 RubyWeb框架Rails入门 Ruby高级特性 Ruby性能优化与最佳实践

    ruby中文 文档

    5. **字符串和数组**:这两种数据结构在Ruby中非常常用,文档会解释它们的操作和方法,如拼接、查找、替换等。 6. **哈希(Hash)**:Ruby的哈希是一种关联数组,键值对的存储方式,文档会介绍如何创建和操作哈希。...

    Ruby中文帮助文档

    Ruby中文文档.CHM 方便ruby or rails学习.

    ruby中文文档(ruby入门级别教程)

    通过这本指南,你可以掌握如何在Ruby中编写简单的程序,并逐渐深入到更复杂的编程技巧。 2. **RGSS入门教程**:RGSS是一种基于Ruby的游戏脚本系统,常见于RPG Maker系列软件。这个教程将教你如何使用RGSS编写游戏...

    透视Ruby 1.9的Lambda函数

    《Ruby 1.9中的Lambda函数详解》 Ruby语言的一大魅力在于其Block功能,它使得编写简洁、可复用的算法变得轻而易举,甚至让人们对循环的畏惧感大大降低。Block在其他编程语言中被称为Lambda函数或匿名函数,有时也被...

    Ruby入门教程中文PDF 附实例

    Ruby中的控制结构也相当直观。`if`语句用于条件判断,`for`和`while`循环用于迭代。例如,下面的代码会打印1到5的数字: ```ruby for i in 1..5 puts i end ``` Ruby还是一个面向对象的语言,每个值都是一个对象,...

    Ruby元编程第二版中文

    在Ruby中,元编程的强大之处在于其语法简洁且易于理解,使得程序员可以轻松地实现动态行为。Ruby提供了多种元编程工具,包括: 1. **方法定义与调用**:Ruby允许在运行时定义和修改方法,如`define_method`函数可以...

    Ruby语言中文教程.rar

    - 构造函数与析构函数:Ruby中的初始化方法(initialize)相当于构造函数,对象销毁时不会自动调用析构方法。 3. **块、迭代器与闭包** - 块:Ruby中的块是一段可以传递给方法的代码,通常以do...end或花括号{}...

Global site tag (gtag.js) - Google Analytics