当前位置: 首页 > news >正文

【Janet】绑定(def和var)

使用 def 将值绑定到符号。使用未绑定的符号会抛出异常。

(def a 100)
(def b (+ 1 a))
(def c (+ b b))
(def d (- c 100))

def 创建的绑定具有词法作用域。此外 def 创建的绑定是不可变的;它们在定义之后不能修改。对于可变的绑定,像其他语言中的变量,使用 var 关键字。赋值表达式 set 可以用来修改 var 变量的值。

(def a 100)
(var myvar 1)
(print myvar)
(set myvar 10)
(print myvar)

在全局作用域,可以在 defvar 中使用 :private 选项防止绑定被导出到引入该模块的代码中。你也可以给 defvar 传递一个字符串来添加文档。

(def mydef :private "This will have private scope. My doc here." 123)
(var myvar "docstring here" 321)

作用域

作用域就是绑定生效的地方。如果在绑定的作用域外引用它,编译器就会报错。作用域可以有效组织绑定和扩展你的程序。有两种方法在 Janet 中创建作用域。

第一种方式是使用 do 表达式。 do 执行作用域内的多个语句并以最后一个语句做为结果。表达式内创建的绑定不会逃出它的作用域。

(def a :outera)(do(def a 1)(def b 2)(def c 3)(+ a b c)) # -> 6a # -> :outera
b # -> compile error: "unknown symbol \"b\""
c # -> compile error: "unknown symbol \"c\""

尝试在 do 语句结束后访问 do 语句内的绑定都会失败。在 do 表达式内定义的 a 不会覆盖全局作用域内已定义的 a

第二种创建作用域的方式是创建闭包。 fn 表达式也会引入一个作用域,和 do 表达式一样。

还有一个内置的宏 let 可以一次性实现多个绑定,并引入一个作用域。 letdefdo 组合的包裹,它是创建绑定最“函数式”的方式。

(let [a 1b 2c 3](+ a b c)) # -> 6

上面的代码等价于使用 dodef 的例子。这是大多数情况下的首选方式,但是,使用 do 和多个 def 也是可以的。

http://www.dtcms.com/a/589920.html

相关文章:

  • 南山区做网站公司网站建设程序员提成
  • Photoshop - Photoshop 工具栏(28)魔术橡皮擦工具
  • 建设网站的费用明细大概有哪些网站模板带后台下载
  • 网站建设下一步工作计划网站开发怎样转h5页面
  • 做淘宝有没有店小秘类型的网站自己做网站排名好吗
  • 网站开发后端做什么如何建设自己的php网站
  • 使用Terraform创建私有Cloud SQL实例及连接测试
  • 汶上网站开发点金wordpress
  • 信息学奥赛一本通 2090:【22CSPS提高组】假期计划(holiday) | 洛谷 P8817 [CSP-S 2022] 假期计划
  • 算法学习 25 集合
  • 【西门子变频器的理解与调试】
  • 泉州企业自助建站系统网站seo优化管理系统
  • 高端网站建设 房产某企业网站的分析优化与推广
  • 10 万雷达点迹零卡顿回放:WPF + Vortice.Direct2D 多线程渲染实战
  • 09数据处理:使用ClickHouse高效处理监控数据
  • 网站cms是什么意思网上商城怎样推广
  • CPLD(复杂可编程逻辑器件,Complex Programmable Logic Device)是什么?
  • 做钓鱼网站违法吗怎样写代码
  • ChatGPT 2025版:高效AI助手使用指南
  • 行为型设计模式2
  • 深入解析Qt中的QDrag:实现灵活的拖放交互
  • 【11408学习记录】考研英语核心考点:三步拆解阅读理解长难句​
  • 上海电商网站开发花万元请人做网站
  • Vue 数据代理
  • C++常见排序算法详解
  • 中企动力的网站如何网站产品详情页怎么做
  • 前端跨页面通信
  • TypeScript 中的接口(Interface)与类型别名(Type Alias)
  • 直播视频网站如何做中企动力做网站 知乎
  • ZYZ28-NOIP模拟赛-Round4 hetao1733837的record