let和def之间的区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了let和def之间的区别相关的知识,希望对你有一定的参考价值。
我想知道方法和让定义里面的rspec描述块?我为什么要使用let而不是def?
let(:create_user) { post :create }
VS
def create_user
post :create
end
两种方式在测试中似乎都是一样的:
expect { create_user }.to change { User.count }.by(1)
答案
通常,您将使用let
定义来处理您正在测试的某种值(例如let(:apple) { 2 + 3 }
)。关于let
的另一个重要的事情是它使用了memoization。这意味着一旦你为let子句调用了名字,结果就会被缓存而不再计算(apple
变为5,2 + 3
永远不再计算)。
您通常会使用def
来定义方法。在规范中,通常使用方法在测试之间共享通用逻辑,例如规范的复杂设置。
let
有另一个有用的属性 - 你可以使用它的同义词subject
,它可以帮助你缩短你的specs。
另一答案
不确定它是否是唯一的区别,但是let
会记住它的价值。所以它更接近:
def create_user
@_create_user ||= post :create
end
另一答案
另一个重要的区别是你可以将参数传递给方法,但不能传递给let
。
以上是关于let和def之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
用下面的代码解释一下javascript中var和let关键字的区别