查看: 3533|回复: 10

[已经解决] 请问下这个"@A=@B=true"是什么意思呢?

[复制链接]
梦石
0
星屑
9160
在线时间
466 小时
注册时间
2015-5-8
回帖
704
发表于 2022-2-7 04:41:46 | 显示全部楼层 |阅读模式

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

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

×
这种写法我还是第一次遇到...难道就是把类变量@A和类变量@B全都赋值为true的意思嘛?
梦石
0
星屑
29896
在线时间
5733 小时
注册时间
2016-3-8
回帖
1653
发表于 2022-2-7 09:15:15 | 显示全部楼层
这种问题有什么好提出的??
自己试一次不就一清二楚了

https://runrb.io/

评分

参与人数 1赞 +1 收起 理由
taeckle + 1 精品文章

查看全部评分

回复

使用道具 举报

梦石
0
星屑
12824
在线时间
1010 小时
注册时间
2019-11-5
回帖
2329

极短27参与极短25参与极短24参与

发表于 2022-2-7 15:08:35 | 显示全部楼层
本帖最后由 哇哇哇啊叭叭 于 2022-2-8 10:40 编辑

  

  可以确定地是,@a=@b=true确实能把两个变量同时赋值为真。
  有争议地是,后面@a会不会跟@b同步发生改变。记得以前遇到过这样地事情,但后来核实地时候,又无法复现这类情况了,所以什么时候会同步改变这个尚未确定。
  另外,类变量地大小写有没有严格规定呀?
  

点评

类变量地大小写没有严格规定的  发表于 2022-2-8 15:47

评分

参与人数 1赞 +1 收起 理由
taeckle + 1 多谢指点!

查看全部评分

风继续吹,不忍远离。年少轻狂,眼神明亮,最好的年纪,最好的时光。希望岁月是一场春梦
回复

使用道具 举报

梦石
0
星屑
8003
在线时间
1184 小时
注册时间
2007-7-29
回帖
2014
发表于 2022-2-8 14:30:39 | 显示全部楼层
本帖最后由 enghao_lim 于 2022-2-8 15:13 编辑
哇哇哇啊叭叭 发表于 2022-2-7 15:08
可以确定地是,@a=@b=true确实能把两个变量同时赋值为真。
  有争议地是,后面@a会不会跟@b同步发生 ...


不会发生同步改变,基础数据不会执行指针同步,但是对象会。
大小写严格区分,既 @aBcDE 不等于 @Abcde

评分

参与人数 2星屑 +50 赞 +2 收起 理由
RyanBern + 50 + 1 认可答案
taeckle + 1 大神威武!

查看全部评分

回复

使用道具 举报

梦石
0
星屑
12824
在线时间
1010 小时
注册时间
2019-11-5
回帖
2329

极短27参与极短25参与极短24参与

发表于 2022-2-8 15:35:05 | 显示全部楼层

RE: 请问下这个"@A=@B=true"是什么意思呢?

本帖最后由 哇哇哇啊叭叭 于 2022-2-8 10:39 编辑

  
  ruby不是一切皆对象吗?还是这里的对象是某种特指的含义呢?
  最早见到:
  1.   def convert_escape_characters(text)
  2.     result = text.to_s.clone
复制代码

  用克隆,而不直接用赋值的情况。擦测应当是为避免指针同步,将数据源text也一并改掉了。后面发现@xxx=@ooo=xxoo这种情况有时候会导致两变量同步变化。

  但通过这两种例子,无法分辨哪种情况是基础数据,哪种情况是对象:两者要么是局部变量,要么是类变量。或者说,两变量中,存放的对象若是用【.new】创建的,就应是对象?但直觉感觉,ruby里所有东西其实都是.new来的...


  

评分

参与人数 1赞 +1 收起 理由
taeckle + 1 多谢指点!

查看全部评分

风继续吹,不忍远离。年少轻狂,眼神明亮,最好的年纪,最好的时光。希望岁月是一场春梦
回复

使用道具 举报

梦石
0
星屑
8003
在线时间
1184 小时
注册时间
2007-7-29
回帖
2014
发表于 2022-2-8 20:07:27 | 显示全部楼层
哇哇哇啊叭叭 发表于 2022-2-8 15:35
ruby不是一切皆对象吗?还是这里的对象是某种特指的含义呢?
  最早见到:

boolean和numeric不是对象,没有所谓的克隆,除非自行指针操作(变量指针而非值本身),不然 a = b = 100,就是赋予同值,是否还有其他基础数据也是雷同我没查过不能确定。

这个吊诡的例子其实可以解释numeric是对象但不是对象……
  1. a = 1
  2. puts 1.object_id == a.object_id   #=> true
复制代码
解释能力有限,大致上可以被理解为只有一个值为1的Numeric被允许存在。

评分

参与人数 1赞 +1 收起 理由
哇哇哇啊叭叭 + 1 竟然有种像谈哲学的感觉

查看全部评分

回复 1 0

使用道具 举报

梦石
1
星屑
24088
在线时间
3339 小时
注册时间
2011-7-8
回帖
3862

开拓者

发表于 2022-2-8 20:45:28 | 显示全部楼层
本帖最后由 guoxiaomi 于 2022-2-8 20:52 编辑

整数(Fixnum)是立即值:其“地址”并不是封装了一个指针,而是固定值
Screenshot 2022-02-08 204414.png
true是TrueClass的单例,我认为它也是立即值,但是文档里似乎没有提……

点评

感觉好像代码里面要是较真儿的话,没有一个地方没有例外呢  发表于 2022-2-8 21:33

评分

参与人数 3星屑 +50 赞 +3 收起 理由
taeckle + 1 大神威武!
RyanBern + 50 + 1 被醋瞎
哇哇哇啊叭叭 + 1 精品文章

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复

使用道具 举报

梦石
0
星屑
9160
在线时间
466 小时
注册时间
2015-5-8
回帖
704
 楼主| 发表于 2022-2-28 17:25:26 | 显示全部楼层
enghao_lim 发表于 2022-2-8 14:30
不会发生同步改变,基础数据不会执行指针同步,但是对象会。
大小写严格区分,既 @aBcDE 不等于 @Abcde ...

大神请问下你说的这个对象会发生指针同步是长什么样子的呢?可以给咱举个简单的例子嘛?多谢了!
回复

使用道具 举报

梦石
0
星屑
8003
在线时间
1184 小时
注册时间
2007-7-29
回帖
2014
发表于 2022-2-28 19:26:37 | 显示全部楼层
taeckle 发表于 2022-2-28 17:25
大神请问下你说的这个对象会发生指针同步是长什么样子的呢?可以给咱举个简单的例子嘛?多谢了! ...
  1. class IamObj
  2.     attr_accessor:myValue
  3.     @myValue = nil
  4.     def initialize
  5.         @myValue = 10;
  6.     end
  7. end

  8. @a = @b = IamObj.new()

  9. print(@a.myValue)

  10. @b.myValue = 9

  11. print(@a.myValue) #指针同步所以修改@b既等于修改@a。
复制代码

评分

参与人数 1赞 +1 收起 理由
taeckle + 1 大神威武!

查看全部评分

回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部