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

Ruby – 重写/启用多个赋值(例如`a,b,c = d,e,f`)

发布时间:2020-12-16 19:26:56 所属栏目:百科 来源:网络整理
导读:在ruby,你可以这样做: d = [1,2,3]a,b,c = d a,b和c将分别接收值1,2和3. d,在这种情况下,在Array中,ruby知道将其内容分配给a,b和c.但是,如果d是一个Fixnum,例如,只有一个将分配给d的值,而b和c将被分配为nil. d的什么属性允许它用于多个赋值?在我到目前为止
在ruby,你可以这样做:
d = [1,2,3]
a,b,c = d

a,b和c将分别接收值1,2和3.

d,在这种情况下,在Array中,ruby知道将其内容分配给a,b和c.但是,如果d是一个Fixnum,例如,只有一个将分配给d的值,而b和c将被分配为nil.

d的什么属性允许它用于多个赋值?在我到目前为止的探索中,我只能以这种方式使Array的子??类的实例行为.

解决方法

这是一个非常无证的功能,我谨慎使用,但我们走了.从书中的Ruby编程语言:

When there are multiple lvalues and
only a single rvalue,Ruby attempts to
expand the rvalue into a list of
values to assign. If the value is an
array,Ruby expands the array so that
each element becomes its own rvalue.
If the value is not an array but
implements a to_ary method,Ruby
invokes that method and then expands
the array it returns.

在Ruby 1.8中,这是to_ary方法,在Ruby 1.9文档中说它调用to_splat,但是我没有测试(在这台机器中没有1.9)它没有按预期的方式工作.所以,你必须在对象中定义一个to_ary方法.

class Week
  def to_ary
    %w(monday tuesday wednesday thursday friday saturday sunday)
  end
end

mon,tue,wed,thu,*weekend = Week.new

*%w(…)对于一系列单词是一个特殊的符号,如果你懒惰写[‘星期一’,’星期二’…]

(编辑:李大同)

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

    推荐文章
      热点阅读