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

Project1

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

[有事请教] RUBY中如何顯式地對整數變量建立引用變量?

[复制链接]

Lv2.观梦者

梦石
0
星屑
500
在线时间
177 小时
注册时间
2006-10-3
帖子
618
跳转到指定楼层
1
发表于 2013-3-27 12:12:59 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
如果是類實例只要在初始化變量時直接以目標變量初始化,就會自動建立引用關係。但是對於整數等基礎類型則是副本。如何對整數變量顯式地創建引用變量?
在我初学RM的时候觉得脚本是高手的工具,等我学会了编程技术后才发现脚本原来是小孩子的玩具。
头像被屏蔽

Lv2.观梦者 (禁止发言)

梦石
0
星屑
653
在线时间
3774 小时
注册时间
2011-2-26
帖子
1839

开拓者

14
发表于 2013-3-28 22:38:40 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv2.观梦者 (禁止发言)

梦石
0
星屑
653
在线时间
3774 小时
注册时间
2011-2-26
帖子
1839

开拓者

13
发表于 2013-3-28 21:34:50 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1230
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

12
发表于 2013-3-28 20:56:05 | 只看该作者
晴兰 发表于 2013-3-27 19:46
你可以把想要的声明方式写出来,然后再考虑实现。
Ruby最大的代码库是Ruby On Rails,如果读他的代码就会 ...

Fixnum类的object_id是可以算的,公式是:值*2 + 1。

See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
11
发表于 2013-3-28 04:55:11 | 只看该作者
流川枫 发表于 2013-3-27 19:38
class Ref
  attr_accessor :obj
  def initialize(obj)

哈哈~前幾天才和人討論過這個問題,在 Ruby/Python/Java 中所謂的傳遞引用和 C++ 中的傳遞引用是不同的,在 Python 社區這個概念被稱為「call by sharing」,但在 Ruby 和 Java 社區這個概念依然被稱為「call by reference」……

詳見 http://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_sharing

点评

Ruby总感觉一会儿是传值,一会儿是引用(数组等的时候)。很闹心。  发表于 2013-3-28 20:57
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1230
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

10
发表于 2013-3-27 20:22:17 | 只看该作者
本帖最后由 DeathKing 于 2013-3-27 20:23 编辑


RUBY 代码复制
  1. a = 1
  2. id = a.obejct_id #=> 3
  3. ObjectSpace._id2ref(id).inspect #=> "1"


你还是换个解决方法吧,总赶觉这样很丑陋。


囧,用成quote标签了。

See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv2.观梦者 (禁止发言)

梦石
0
星屑
653
在线时间
3774 小时
注册时间
2011-2-26
帖子
1839

开拓者

9
发表于 2013-3-27 19:46:12 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
500
在线时间
177 小时
注册时间
2006-10-3
帖子
618
8
 楼主| 发表于 2013-3-27 19:38:30 | 只看该作者
晴兰 发表于 2013-3-27 19:24
其实老代码里面的等号会出问题,可以有多种方式来解决
比方说下面的v = 换成v[]=
v+=3换成v[] += 3

class Ref
  attr_accessor :obj
  def initialize(obj)
    @obj = obj
  end
  def method_missing(sym, *args)
    obj.send sym, *args
  end

  def to_int
    obj
  end
  def to_str
    obj
  end
  def to_ary
    obj
  end
end

a = Ref.new(5)
ss = a
ss.obj = 6
p a

這樣輸出6
在我初学RM的时候觉得脚本是高手的工具,等我学会了编程技术后才发现脚本原来是小孩子的玩具。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv2.观梦者 (禁止发言)

梦石
0
星屑
653
在线时间
3774 小时
注册时间
2011-2-26
帖子
1839

开拓者

7
发表于 2013-3-27 19:24:45 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
500
在线时间
177 小时
注册时间
2006-10-3
帖子
618
6
 楼主| 发表于 2013-3-27 19:19:59 | 只看该作者
晴兰 发表于 2013-3-27 19:07
很粗糙的一个写法,另Ruby1.9才有BasicObject,如果是Ruby1.8就干脆去掉这个继承,同时undef一堆奇怪的方法 ...

class Ref
  attr_accessor :obj
  def initialize(obj)
    @obj = obj
  end
  def method_missing(sym, *args)
    obj.send sym, *args
  end

  def to_int
    obj
  end
  def to_str
    obj
  end
  def to_ary
    obj
  end
end

ss = 5
a = Ref.new(ss)
ss = 6
p a
---------------------
輸出為 #<Ref:0x1c357a8 @obj=5>
而不是 ss的6
在我初学RM的时候觉得脚本是高手的工具,等我学会了编程技术后才发现脚本原来是小孩子的玩具。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-7-18 06:31

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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