Quando usare RSpec let ()?

Tendo ad usare prima dei blocchi per impostare le variabili di istanza. Quindi uso queste variabili nei miei esempi. Di recente mi sono imbattuto in let() . Secondo i documenti di RSpec, è usato per

… per definire un metodo helper memoized. Il valore verrà memorizzato nella cache su più chiamate nello stesso esempio ma non tra gli esempi.

In che modo è diverso dall’usare le variabili di istanza prima dei blocchi? E anche quando dovresti usare let() vs before() ?