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关键字的区别

js 中var contst let 之间的区别

就声明而言,Javascript for of 循环中的 let 和 const 之间没有区别吗?

let,const,var三者之间的区别

这两个代码片段之间有区别吗?如果有,那又如何? [复制]

字符串插值和片段之间有啥显着区别吗?