设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1627|回复: 9
打印 上一主题 下一主题

这个语言有没有1个类似映射的方法

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
55
在线时间
20 小时
注册时间
2005-10-24
帖子
1571
跳转到指定楼层
1
发表于 2008-2-4 00:55:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
   xx,yy,zz是3个已知类,能不能写个新的类,向那3个已知类中各自添加1个方法?        

class xx
end

class yy
end

class yy
end

此贴于 2008-2-5 17:58:03 被版主水迭澜提醒,请楼主看到后对本贴做出回应。
版务信息:版主帮忙结贴~

Lv5.捕梦者

御灵的宠物

梦石
12
星屑
8438
在线时间
88 小时
注册时间
2006-12-11
帖子
3148

第2届TG大赛亚军

2
发表于 2008-2-4 00:56:13 | 只看该作者
class xxxx
  def abcd
    return xxx
  end
end

用alias可以重定义方法……映射是什么……能否翻译成英文orz
我的Lofter:http://nightoye.lofter.com/

回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

心无天使

梦石
0
星屑
49
在线时间
0 小时
注册时间
2007-12-15
帖子
1016
3
发表于 2008-2-4 01:00:15 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv5.捕梦者

御灵的宠物

梦石
12
星屑
8438
在线时间
88 小时
注册时间
2006-12-11
帖子
3148

第2届TG大赛亚军

4
发表于 2008-2-4 01:01:59 | 只看该作者
orz……我学编程的教材是英文……导致很多名词和概念都很混淆地说= =
好像确实不能同时给三个类增加方法吧= =
我的Lofter:http://nightoye.lofter.com/

回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

心无天使

梦石
0
星屑
49
在线时间
0 小时
注册时间
2007-12-15
帖子
1016
5
发表于 2008-2-4 01:05:37 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv5.捕梦者

御灵的宠物

梦石
12
星屑
8438
在线时间
88 小时
注册时间
2006-12-11
帖子
3148

第2届TG大赛亚军

6
发表于 2008-2-4 01:09:38 | 只看该作者
用力握爪,俺最先接触的也是那只海龟orz
第二个是vb,然后是c++.....然后是RGSS……现在在痛苦地学java……= =
不是我要学这么多的……天知道我们学校怎么设置课程的……学c++之后的进阶课程竟然使用java上……orz
我的Lofter:http://nightoye.lofter.com/

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
20 小时
注册时间
2005-10-24
帖子
1571
7
 楼主| 发表于 2008-2-4 01:12:27 | 只看该作者
以下引用Eclair于2008-2-3 17:05:37的发言:

继续otl……
偶米学过专业的编程- -bbb
第一个接触的语言类的东西是那只小海龟,第二个就是RGSS了……


小海龟...记得小霸王学习机中有那个语言卡带{/hx}
最先接触的是g.basic 学习机上编程的专用软件,可以制作"超级马力"的那语言

看来真的是没有那个方法了.

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
400 小时
注册时间
2005-10-24
帖子
634
8
发表于 2008-2-4 11:39:23 | 只看该作者
可以用eval实现
class A
end

class B
  
end

class C
end

def define_method_for_class(a_class)
  method_def = "def hello
  p 'Hello'
  end"
  eval("class #{a_class}; #{method_def}; end")
end

define_method_for_class(A)
define_method_for_class(B)
define_method_for_class(C)

A.new.hello # => "Hello"
B.new.hello # => "Hello"
C.new.hello # => "Hello"
回复 支持 反对

使用道具 举报

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

9
发表于 2008-2-4 13:09:05 | 只看该作者
以下引用叶子于2008-2-4 3:39:23的发言:

可以用eval实现

class A
end

class B

end

class C
end

def define_method_for_class(a_class)
method_def = "def hello
p 'Hello'
end"
eval("class #{a_class}; #{method_def}; end")
end

define_method_for_class(A)
define_method_for_class(B)
define_method_for_class(C)

A.new.hello # => "Hello"
B.new.hello # => "Hello"
C.new.hello # => "Hello"




[本贴由作者于 2008-2-4 3:40:20 最后编辑]


eval与class_eval追加的方法在重载时会消失,感觉标准的方法仍然是利用超类或者模块mixin.
纵然千里外,我等雁归来。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
400 小时
注册时间
2005-10-24
帖子
634
10
发表于 2008-2-4 18:50:04 | 只看该作者
以下引用美兽于2008-2-4 5:09:04的发言:

eval与class_eval追加的方法在重载时会消失,感觉标准的方法仍然是利用超类或者模块mixin.

重载时消失能否举例?

貌似Marshal的dump和load不影响..
# 反射测试1

class A
end

def define_method_for_class(a_class)
  method_def = "def hello
  p 'Hello'
  end"
  eval("class #{a_class}; #{method_def}; end")
end

define_method_for_class(A)

(Marshal.load(Marshal.dump(A.new))).hello # => "Hello"


另外根据美兽提出的思路,下面两个分别是用模块揉合和调用define_method
(由于include和define_method是私有方法,外部调用的话只能通过send)
# 反射测试2

class A
end

module Hello
  def hello
    p 'Hello'
  end
end

A.send(:include, Hello)

A.new.hello # => "Hello"

# 反射测试3

class B
end

B.send(:define_method, :hello){
p 'Hello'
}

B.new.hello # => "Hello"

系统信息:本贴由本区版主认可为正确答案,66RPG感谢您的热情解答~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-3 06:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表