今天经过
night-stalker的提醒,突然意识到Ruby的内部类和Java的内部类存在不少区别。其中我发现最大的区别是:
在Java中,内部类方法可以访问其自身的数据字段,也能够访问创建它的外部类的数据字段。在Java中内部类对象要有一个银隐含引用,指向创建它的对象。
而在Ruby中,恰好相反。外部类的方法可以访问内部类的字段,但是反过来却不行。
若单独的使用,只要熟悉相应的语法规则,不会出现问题。但是要在JRuby中的时候,就有可能出现问题,因为有2中截然不同的方式实现内部类,这时可能会出现乱子!
module MyPackage
module InnerPacage
class TheWorker
def initialize(foo)
@foo=WorkHelper.new(foo)
end
def foo
@foo.caclulate
end
class WorkHelper
def initialize(value)
@value=value
end
def caclulate
@value**2
end
end
end
end
end
puts MyPackage::InnerPacage::TheWorker.new(10).foo
class ButtonPanel extends JPanel{
public Button(){
JButton yellowbutton=new JButton("yellow");
add(yellowbutton);
ColorAction yellowAction new ColorAction(Color.YELLOW);
yellowbutton.addActionListener(yellowAction);
}
private class ColorAction implements ActionListener
{
public ColorAction(Color c){
backcolor=c;
}
public void actionPerformed(Action event){
setBackground(backcolor);
}
private Color backcolor;
}
}
分享到:
相关推荐
Ruby的块和闭包是其独特之处,它们提供了强大的控制流和数据处理能力,这是Java中匿名内部类和接口不能比拟的。 其次,Ruby的语法简洁明了,例如,方法调用可以省略括号,变量声明不需要特定关键字,这使得代码看...
**3.5 类变量与类方法** 类变量是以`@@`开头的变量,可以在类的所有实例之间共享。类方法则是定义在类本身上的方法。 ```ruby class MyClass @@counter = 0 def self.increment_counter @@counter += 1 @@...
- **MRI内部机制**:MRI(Matz's Ruby Interpreter)是Ruby的标准实现,它通过GIL保证了内存安全性和数据一致性。 - **特殊情况:阻塞I/O操作**:当线程执行阻塞I/O操作时,GIL会被释放,允许其他线程执行。 #### ...
- **Sebastian Hennebrüder**(Java顾问和培训师)提到,在阅读本书后尝试了Java和JRuby的元编程技术,并将其比作在剑战中手持香蕉与持有一米长武士刀的区别,暗示使用Ruby元编程后的强大感。 - **Jurek Husakowski...
- **类与对象**:Ruby中的一切都是对象,类是对象的模板,可以定义属性和方法。通过继承和多态机制,可以构建复杂的程序结构。 #### 五、面向对象编程在Ruby中的应用 - **对象**:在Ruby中,每个实体都是对象,即使...
5. **闭包和块**:Ruby的块和闭包是强大的功能,允许在函数内部定义局部作用域的代码块,可作为参数传递,这在Java 8之后才引入类似的概念(Lambda表达式)。 6. **并发模型**:Java使用线程进行并发处理,而Ruby...
- **NetBeans**: 除了支持Java之外,NetBeans也支持Ruby开发。 3. **Ruby的第一个程序** - 通常第一个Ruby程序是输出“Hello, World!”,用于验证Ruby环境是否配置正确。 4. **数字** - **内建类**: Ruby中内置...
Ruby-Logging库是一个在Ruby编程语言中广泛使用的日志处理工具,它借鉴了Java的log4j库的设计理念,提供了一种灵活、可扩展的方式来记录应用程序的运行信息。这个库的核心目标是帮助开发者轻松地控制日志输出的级别...
学生提问:既然内部类是外部类的成员,是否可以为外部类定义子类,在子类中再定义一个内部类来重写其父类中的内部类? 211 6.7.4 局部内部类 211 6.7.5 匿名内部类 212 6.7.6 闭包(Closure)和回调 215 6.8 ...
### Ruby on Rails 101:深入理解与实践 #### 引言 《Ruby on Rails 101》是一本介绍Ruby on Rails(简称RoR或ROR)的基础书籍,旨在为初学者提供一个全面而深入的学习框架。本书由Peter Marklund编写,包含了五天...
通过阅读"Working With Ruby Threads"这本书,你可以深入了解Ruby线程的内部工作原理,学习如何编写高效、安全的多线程Ruby程序。这本书不仅涵盖了理论知识,还提供了许多实用示例和最佳实践,对任何希望提升Ruby...
JRuby 1.7.14 版本主要致力于与 Ruby 1.9.3 的兼容性,确保在 Java 上运行 Ruby 代码时能够保持与原生 Ruby 环境相似的行为。在这个版本中,开发者修复了大量问题,包括性能优化、内存管理、兼容性修复以及对特定...
标题中的“Ruby、Python不能威胁Java的13个理由”表明了作者认为尽管这两种脚本语言在某些领域受到关注,但它们无法撼动Java在编程领域的主导地位。描述提到,作者通过数据分析反驳了Java将被替代的观点,并提出了...
#### 四、模块与类的区别 尽管模块和类在语法上非常相似,但它们之间存在一些关键区别: 1. **模块不可实例化**:不能像创建类实例那样创建模块实例。 2. **模块无子类**:模块不支持继承,即不能定义为其他模块的...
- **命令式语言**:如FORTRAN、Pascal、C++、Java等,这类语言关注于指令的顺序执行,通过命令式的步骤来实现算法。 - **第四代语言** 第四代编程语言的特点是声明式编程,即用户只需要描述“做什么”,而不是...
- **目的**:保护对象的内部状态不被外部直接访问,仅通过公共接口与外界交互。 **多态**: - **定义**:指不同对象对同一消息作出响应的能力。 - **实现方式**:通过方法重写实现。 #### 四、常用库与框架 **...
标签“源码”可能暗示着这篇博客会深入到Ruby的源码层面,讨论其内部机制,如垃圾回收、解析器的工作原理或是类和对象的实现。对于想要深入了解Ruby的开发者来说,这部分内容非常有价值。 总的来说,Ruby语言以其...
这一点与某些其他编程语言不同,比如Java或C++,在那里重新定义常量会导致编译错误。 在Ruby的交互式解释器(irb)中,我们可以看到如下示例: ```ruby ruby> fluid = 30 # 输出:30 ruby> fluid = 31 # 输出:31 ...