加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 为什么赋值的值总是参数的值?

发布时间:2020-12-17 02:34:13 所属栏目:百科 来源:网络整理
导读:参见英文答案 Why isn’t `method=` treated the same as any other method?????????????????????????????????????1个 有人会解释为什么在旧版本的Ruby中,赋值的结果是属性设置方法返回的值,但在Ruby 1.8之后,赋值的值始终是参数的值;方法的返回值被丢弃.在
参见英文答案 > Why isn’t `method=` treated the same as any other method?????????????????????????????????????1个
有人会解释为什么在旧版本的Ruby中,赋值的结果是属性设置方法返回的值,但在Ruby 1.8之后,赋值的值始终是参数的值;方法的返回值被丢弃.在下面的代码中,旧版本的Ruby会将结果设置为99.现在结果将设置为2.

class Test
  def val=(val)
    @val = val
    return 99
  end
end

t = Test.new
result = (t.val = 2)
result # => 2

这种变化背后的原因是什么?

解决方法

当您想要将相同的值分配给多个变量时,将赋值链接在一起的情况并不少见.这在其他语言中更为常见.

@user_id = user.id = next_user_id

但是当你没有考虑这个时会发生什么,所以返回值与输入值不一样?

class User
  def id=(name)
    @id = name
    @modified = true
  end

  def modified?
    @modified
  end
end

这段代码完全没问题,直到有一天你把它放在如上所述的赋值链中,突然间你会得到意想不到的结果.

因此,解释器执行某种伏都教并确保赋值的RHS是返回值,丢弃实际的返回值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读