0 0

RUBY内部类怎么访问外部类的变量15

class Aaa
	attr_accessor :name
	def get_name
	@name
end
	def put(name)
		@name=name
		aa="hello"
		class<<aa
			def print_hello
			 STDOUT.puts self+Aaa::get_name
			end
		end
		
		aa.print_hello
	end
end
z=Aaa.new
z.put "pp"

这段代码,我希望输出 hellopp
Aaa::get_name我试过替换成@name,name,get_name都失败了。。
问题补充:
z=Aaa.new 
z.put "pp" 

liuqiang你习惯回帖不看帖吗?

2008年7月11日 17:32

4个答案 按时间排序 按投票排序

0 0

我只能告诉你的想法为什么不对,首先我已经回复你用类变量,你说得访问实例变量,那么你的类都没有被实例化从何访问该类的实例变量呢?
或许只有这样
aaa = Aaa.new
STDOUT.puts self+aaa.get_name  
如果你首先不把Aaa实例化,不管是不是在内部类中,你永远访问不了Aaa的实例方法和实例变量

2008年7月19日 11:04
0 0

你的要求基本上不能实现。

为什么不用模块,将一个模块混入到类中,可以实现变量共享,访问!!!


如果你一定要这样实现,估计要改Ruby的源代码,实现你这样的机制。

2008年7月18日 19:01
0 0

想不通你为什么要这样做,能解释一下你有什么目的吗?

2008年7月17日 17:58
0 0

不知道你的场景是什么, 为什么要这样子设计.

要实现请参考 "Ruby 元编程"

2008年7月16日 23:11

相关推荐

    Ruby中类变量和实例变量的比较

    - **类变量**:类变量被认为是私有的,不能直接在类外部访问。但是,可以通过定义类方法或实例方法来间接访问类变量。 - **实例变量**:同样被认为是私有的,在类外部也不能直接访问。同样地,可以通过定义实例...

    Ruby 语言中类与对象简介,入门级语法介绍

    例如,如果有一个`Person`类,可以定义实例变量`@name`、`@age`等,并提供方法来访问这些变量,而不是直接允许外部代码直接修改这些变量。 - **继承**:继承使得一个类可以继承另一个类的属性和方法。这是面向对象...

    .一步一步学RUBY

    变量分为局部变量、全局变量、实例变量和类变量,每种变量的作用域和生命周期不同,提供了灵活的数据封装和访问控制。 **常量**以大写字母开头,尽管Ruby允许对常量进行重新赋值,但这将触发警告,强调常量应保持...

    ruby中文教程(源代码)

    - 方法定义:Ruby允许在类定义内部以及类外部定义方法,还可以使用`def self.method_name`定义类方法。 3. **Ruby on Rails** - Rails是基于Ruby的Web开发框架,遵循MVC(模型-视图-控制器)架构模式。 - ...

    深入分析Ruby 变量

    实例变量在对象的生命周期内有效,并且是私有的,不能直接从外部访问。除非通过方法暴露。下面是一个使用实例变量的例子: ```ruby class MyClass def initialize(@my_attribute) # ... end end ``` 这里,`@my_...

    ruby初学者教程(对初学者很有帮助)

    对象可以访问类定义的方法,并且可以通过实例变量存储数据。 ```ruby person = Person.new("Alice", 30) person.speak # 输出 "Hello, my name is Alice." ``` **3.3 继承** Ruby支持单一继承,子类可以继承父类...

    ruby 中文 教程 从入门到精通

    - **封装**:通过私有方法和属性限制对外部的直接访问,保护内部状态。 - **继承**:允许子类继承父类的属性和方法,实现代码重用。 - **多态**:同一接口可以表示不同的行为,增强了程序的灵活性。 通过以上知识点...

    ruby-2.1.1.tar.gz

    Ruby还支持动态类型,意味着变量的类型在运行时确定,这为编程提供了更大的灵活性。 Ruby的面向对象特性非常强大,它包含了类、对象、继承、封装和多态等核心概念。Ruby中的类可以用来创建新的对象,而对象则是类的...

    Ruby程序设计.doc

    - **require/load:** 用于加载外部的Ruby文件。 - **include:** 用于将一个模块混合到当前类中。 #### 九、异常 **9.1 异常处理** Ruby提供了try/catch风格的异常处理机制。 **9.2 定义异常类** 可以定义...

    Ruby语言教程大纲.zip

    - 封装:通过访问控制符(public, private, protected)实现数据封装,保护内部状态不被外部直接修改。 - 多态:不同类的对象可以响应相同的消息,实现代码的复用和扩展。 2. **基本语法** - 变量:Ruby有局部...

    ruby脚本交互.rar

    通过命令行参数,我们可以传递参数给Ruby脚本并在脚本内部处理。标准输入/输出则允许脚本与用户或其它程序进行数据交换。文件操作允许脚本读写文件,实现数据持久化。网络通信则支持HTTP、TCP/IP等协议,使得脚本...

    Ruby语言入门教程v1.0.pdf

    3. 封装:通过私有方法(private)和保护方法(protected)实现,限制对象的内部状态被外部直接访问。 4. 单例类:Ruby中每个对象都有一个与之关联的单例类,可以为单个对象添加方法。 三、模块(Module) 模块是...

    ruby语法基础教程.pdf

    - Ruby提供了不同的访问级别来控制类内部数据的访问权限,包括public、protected和private。 **3.7 元类** - 元类是创建类的类,可以用来定制类的行为。 - 在Ruby中,每个类都有一个隐式的元类。 **3.8 变量** - *...

    RubyUsers'Guide

    Ruby中的访问控制允许开发者指定哪些方法和变量可以被外部访问或修改。 10. 单例方法 单例方法允许开发者为单个对象创建独立的方法,这在Ruby中是一个非常有用的功能。 11. 过程对象 Ruby中的过程对象是类似于其他...

    实例讲解Ruby中的五种变量

    在类外部,不能直接访问实例变量。比如: ```ruby class Customer def initialize(id, name, addr) @cust_id = id @cust_name = name @cust_addr = addr end end cust1 = Customer.new("1", "John", ...

    Ruby程序设计(简洁清新的教程)

    - **局部变量**:作用域限制在定义它的方法内部。 - **实例变量**:以`@`开头,作用于整个类的所有实例。 - **类变量**:以`@@`开头,作用于整个类的所有实例及子类。 - **全局变量**:以`$`开头,可在程序的任何...

    Refactoring.in.Ruby.pdf

    描述:一个类过分依赖于另一个类的内部状态或行为。 解决方法:可以尝试将相关的功能转移到拥有这些状态的类中,或是通过组合的方式让这些类协作完成任务。 - **中间人 (Middle Man)** 描述:一些方法仅仅...

    Ruby语言教程.docx

    - **目的**:保护对象的内部状态不被外部直接访问,仅通过公共接口与外界交互。 **多态**: - **定义**:指不同对象对同一消息作出响应的能力。 - **实现方式**:通过方法重写实现。 #### 四、常用库与框架 **...

Global site tag (gtag.js) - Google Analytics