algorand / algorand/pyteal

Var initialization

未關閉
#451 3 則留言 2 個 reaction 已指派 0 人 在 GitHub 檢視
new-feature-request Team Scytale
主要語言
Python
星號
288
分支
138
PR 合併指標
30 天內沒有已合併 PR

描述

## Problem

Initializing the scratch var seems weird
```py
program = Seq(
(x := ScratchVar()).store(Int(1)),
x.load()
)
```
what if?
```py
program = Seq(
v := Var(Int(1)),
v.load()
)
```

## Solution

not even PR'ing this, its maybe even weirder

```py
from pyteal import *

class Var(Expr):
def __init__(self, val: Expr):
self.val = val
self.slot = ScratchSlot()
self.type = val.type_of()
self.has_stored = False

def __str__(self):
if self.has_stored:
return self.slot.load(self.type).__str__()
else:
return self.slot.store(self.val).__str__()

def __teal__(self, options: CompileOptions):
if not self.has_stored:
self.has_stored = True
return self.slot.store(self.val).__teal__(options)

def load(self):
return self.slot.load(self.type)

def store(self, val: Expr):
self.val = val
return self.slot.store(val)

def has_return(self):
return False

def type_of(self):
if self.has_stored:
return self.val.type_of()
else:
return TealType.none

opts = CompileOptions(mode=Mode.Application, version=6)

program = Seq(v := Var(Int(1)), v.store(Int(2)), v.load())
print(compileTeal(program, mode=Mode.Application, version=6))
```

貢獻指南

開啟貢獻指南

評估

這個 Issue 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。