Ruby 的 ||=
(or equals)运算符号使用频率是个使用频率满高又方便的方法。在举例实际会用到的情况之前,我们直接先讲最後实际的意定义:如果变数已经被定义,则不会改变变数,如果没有被定义,那就会赋值给变数。
所以是什麽意思呢?举例来说:
my_name ||= "chester"
# => "chester"
my_name ||= "chester_2"
# => "chester"
由此可见验证了上述的定义。但是,如果将变数等於 falsey
的值的情况时,则变数的值将会被更新
my_name = nil
my_name ||= "chester_falsey"
# => "chester_falsey"
同样的在 hash 里面也可以利用相同的原理来理解
hash = {}
# => {}
hash[:my_name] ||= "chester"
# => "chester"
hash
# => {:my_name=>"chester"}
hash[:my_name] ||= "chester_2"
# => "chester"
hash
# => {:my_name=>"chester"}
举个简单的例子来看,如果想要捞其中一种性别类型的 User 资讯时,在 each 回圈内 call 到 users
时就会去到下方的 def 来捞资料,并且只会捞一次存起来,在接下来的回圈中也不会重复的去捞,更能提升速度。
# @users = UserPresenter.new("male")
# @users.each ...(in view)
class UserPresenter
include Enumerable
def initialize(gender)
@gender = gender
end
def each(&_block)
users.each do |user|
yield format(user)
end
end
def format(user)
{
name: user.name,
email: user.email,
backup_email: user.backup_email,
company_name: user.company_name,
phone_number: user.phone_number,
# ...
}
end
def users
@_users ||= User.where(gender: gender)
end
end
不过小心如果捞的值每次都会不相同就不同使用这种方法来处理,不然跑第一次回圈 变数已经被定义
,後面不管是什麽都 不会改变变数
。
看到书上特别讲述Servo的控制 仔细看了一下 发现这个可分别控制到机器人的关节转动或是当成指示刻度...
战斗实际制作Part02 承接昨天的攻击功能制作。拿取到定位点後要转换成Raycast再进行侦测。为...
layout(约束) 拉法 我自己拉 layout 的话,我习惯先选某一个物件当作我的基准点。 例如...
当概念验证过有价值且方向大致正确後,就会开始撰写 User Story,然後进入正式的 UX/UI ...
Introduce 当API规模慢慢扩大,Unit test变得很重要,可以帮助我们检查原本已经正常...