首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我不能调用没有大括号的Nim proc?

Nim是一种静态类型、高性能的编程语言,它支持过程(proc)作为一种函数类型。在Nim中,过程是一种可调用的实体,可以像函数一样使用。然而,当你尝试调用没有大括号的过程时,会出现语法错误。

这是因为在Nim中,过程的定义需要使用大括号来表示过程体的开始和结束。大括号告诉编译器哪些代码属于过程体,因此在调用过程时,编译器可以正确地识别过程的边界。

以下是一个示例,展示了如何定义和调用一个过程:

代码语言:txt
复制
proc myProc() =
  echo "This is my procedure."

# 调用过程
myProc()

在上面的示例中,myProc是一个过程,它没有参数并打印一条消息。通过使用大括号将过程体包围起来,我们确保了过程的定义是正确的。

总结一下,你不能调用没有大括号的Nim过程,因为这违反了Nim语法规则。在定义过程时,请确保使用大括号将过程体包围起来,以便编译器正确解析过程的边界。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

链式调用 | 我的代码没有else

嗯,我的代码没有else系列,一个设计模式业务真实使用的golang系列。 ? 前言 本系列主要分享,如何在我们的真实业务场景中使用设计模式。...属性上 -> 稳定不变的 Do: 当前对象业务逻辑入口 -> 变化的 Run: 调用当前对象的Do,nextHandler不为空则调用nextHandler.Do -> 稳定不变的 套用到下单接口伪代码实现如下...代码demo package main //--------------- //我的代码没有`else`系列 //责任链模式 //@auhtor TIGERB我的代码没有`else`,只是一个在代码合理设计的情况下自然而然无限接近或者达到的结果,并不是一个硬性的目标,务必较真。 2....---- 我的代码没有else系列 更多文章 代码模板 | 我的代码没有else 点击https://github.com/TIGERB/easy-tips/tree/master/go/src/patterns

1.7K40

为什么我的HibernateDaoSupport没有注入SessionFactory

前言 很早之前,就打算写这一篇文章了(其实有很多源码分析的文章打算写,但是自己太拖延了导致很多文章搁浅了)。我为什么要写这一文章呢?...事情的缘由是同事在SpringBoot项目中有一个A类继承HibernateDaoSupport,但是程序运行总是抛出没有成功注入SessionFactory的错误,后来我debug Spring源码解决了这个问题...这个错误的原因是A类的RootBeanDefinition中的autowireMode的值为0,在AbstractAutowireCapableBeanFactory类中的populateBean方法中没有执行到...autowireByName(beanName, mbd, bw, newPvs),导致SessionFactory的属性没有注入成功。...beanFactory)方法中不要使用beanFactory.getBean()会造成类性早熟,最终的后果就是类中的一些属性没有成功注入。

3.1K10
  • Spring容器里为什么没有我需要的Bean?

    Spring容器里为什么没有我需要的Bean?...,看着小菜在沸点评论区不停的滑动,似乎在寻找着什么大瓜 此时的小菜似乎察觉到气氛不太对劲,身后似乎有人,于是飞快的按下 Windows + 1 弹出Idea的开发界面 此时,项目经理开口道:小菜啊,这里有个紧急需求...没过多久,小菜就把需求都搞定了,于是启动服务开始测试 小菜打开测试工具就开始测试接口,但是怎么测试都是404,一开始小菜还以为url写错了,但是检测后发现并没有写错 经过小菜漫长的排查,终于发现了问题:...,并把组件加入到容器中,由于没有配置**basePackages**字段,于是只会扫描当前包下的组件** 当前包也就是com.caicaijava.springbooteasyframeworks 于是...菜菜的后端私房菜

    11121

    为什么我用了Redis之后,系统的性能却没有提升

    很多时候,我们在面对一些热点数据的时候,通常会选择将热点数据放到redis中,以减少数据库的查询,减轻数据库的压力。但是如果我们使用redis的方式不对,那么可能导致系统的性能不升反降。...使用缓存的场景不正确 我们知道redis是基于内存实现的,所以速度会非常快,我们通常会将热点数据放到redis中,以减少对数据库的压力。...但是我们为了保证缓存与数据库的数据一致性,在数据进行修改的时候,我们就需要对缓存进行维护。 所以如果数据的变更很频繁的话,就需要对缓存进行频繁的维护,缓存的命中率也会特别低。...缓存的使用场景应该是修改频率不高,查询频率较高的场景。如果使用redis的场景不对,通常会导致我们得不偿失。 2. key设计不当导致产生了bigkey 什么是bigkey?...如果我们选择appendfsync always的话,虽然数据的安全性高,但是每次写入都要刷盘会导致redis的性能很大程度的降低,所以我们一般会选择appendfsync everysec的策略来对数据进行持久化

    1.9K10

    CPS推广:为什么我的佣金还没有到账呢

    点击登录推广后台,查看银行信息:https://console.cloud.tencent.com/spread/income 问:为什么我的佣金没有到账呢?...佣金次月月结,当月推广订单的佣金预计次月月底的28~31日到账。...如:11月份的推广佣金,需要等到该月结束,次月月结即12月,核算11月推广的佣金,扣减掉退款降配订单的佣金,确定11月总到账佣金,确定12月推广的积分,月结结束后更新12月的会员星级,最后财务流程付款,...点击前往修改收款信息 (6)实名认证为企业用户 推广者仅限腾讯云官网已实名认证的个人用户,企业用户不能成为推广者,佣金无法支付。详情可扫码添加管理员微信咨询。 问:推广的佣金是否扣税?...即:实收推广佣金=应收推广佣金-代扣税费(如有)点击查看税费计算说明 问:在哪里查看我的佣金收入呢? 目前的CPS推广会员积分体系,根据月结佣金当月的会员星级,佣金分期支付。

    10.7K60

    nim与python的

    nim与python的异同 名词:方法与函数同义.仅仅是语言规定差异.在本文中不做区别. 1. python都是指def定义的处理过程 2. nim的 proc有返回值, func没有返回值(0.19版之后出现...your name is $1." % ["rock","world"] #输出顺序变化了 nim里文字串的操作符%不是默认操作符,需要在使用前引入strutils包.否则不能使用,在编译时会报错....import strutils 这样就会给为文字串增加很多功能, 比如上面的%操作符 方法调用: python是传统的[对象.方法]调用写法 nim 既可以用传统OOP风格的[对象.方法],也可以用[...UFCS 要求方法(proc)或函数(func)的第一个参数是要操作的类型....等同于 let a:string = "" len2(a) == a.len2 #nim可以不写函数调用的括号 类的方法(proc/func/method)要求第一个参数是类的类型.

    82310

    #PY小贴士# 抓下来的网页为什么没有我要的内容?

    刚刚接触爬虫的同学常会遇到这样的疑问: 为什么网页上面有的信息,我用代码抓下来的里面就没有,也没有报错?...除开请求本身失败或被反爬的情况外,通常这种问题的原因其实是: 页面上本来就没有你要的内容! 那么网页上的内容是哪里来的?...现在绝大多数网站的内容并非直接通过你访问的 URL 请求直接返回,而是会通过一种叫做 AJAX 的方法,在页面的基本框架加载完毕后,再通过其他的请求向后台服务器再次请求获取的。...具体细节我不展开了,你可以网上去按我给到的关键字去搜索相关内容,下次我也会专门发下这方面的讲解文章。 那开发者工具里为什么又会在代码里显示出这些内容呢?...这是因为开发者工具的元素(Elements)项显示的并不是网页的原始代码,而是浏览器将页面加载并渲染后的结果,它里面包含了异步请求拿到的数据和前台JS代码执行后对页面内容的修改。

    2.1K20

    Nim教程【五】

    因为Rust是Mozilla公司搞出来的东西,所以也有人比较担心这个问题 现在的变数还是 Mozilla 自身能不能挺住的问题 Nim和小伙伴们玩的很好 Nim的编译器可以运行在windows、linux...提供了c2nim工具可以把C语言直接格式化成Nim语言,这样C语言开发的类库就很容易被Nim使用了 参数的默认值 在定义一个方法的时候,可以为方法的参数定义好默认值,就像下面这样: proc createWindow...类型的默认值,本身就是unknown,所以没必要设置:title: string = "unknown" 方法的重载 所有的高级语言基本都有方法的重载,Nim也不例外 proc toString(x: ...echo(toString(13))   # 调用 toString(x: int) 方法 echo(toString(true)) # 调用 the toString(x: bool) 方法 这里不会详细阐述...Nim是怎么实现方法重载的,但可以肯定的告诉你,并没有使用特别复杂的算法和机制,而是基于一种简单的技术实现的 另外有歧义的方法重载编译不会通过 操作符 在Nim的类库中大量的使用了方法的重载, 主要的原因就是操作符的原理其实就是方法重载

    1.3K80

    我为什么要创建一个不能被实例化的类

    一个不能被初始化的类,有什么用? 这就要引入我们今天讨论的一种设计模式——混入(Mixins)。 Python 由于多继承的原因,可能会出现钻石继承[1]又叫菱形继承。...为了保留多继承的优点,但又摒除缺点,于是有了混入这种编程模式。 Mixins 是一个 Python 类,它只有方法,没有状态,不应该被初始化。它只能作为父类被继承。...显然,这样写会报错,因为两个类的实例是不能比较大小的: 但在现实生活中,当我们说 某人比另一个人大时,实际上是指的某人的年龄比另一人年龄大。...other.age def __ge__(self, other): return self.age >= other.age 然后在使用 People 类继承它: 本质上,混入的写法与普通的类继承类没有什么区别...由于这些 Mixin 类提供的各个工具方法互不相关,所以不存在菱形继承的问题。但是在子类中却可以分别调用这些工具方法,从而扩展子类的功能。

    3.4K10

    用Nim语言开发windows GUI图形界面程序

    前言 本文得到了“樂師”的大力支持, 我们一起调试程序到深夜,要是没有他的帮忙, 我不知道要多久才能迈过这道坎, 另外“归心”还有其他人也提供了帮助, 他们都来自于QQ群:“Nim开发集中营”469329878...; 感兴趣的朋友,可以加这个群一起讨论 配置GUI开发环境 我在这篇博客中,写到了Nim开发环境的搭建 那篇博客中说MingW是必选的, 这对于开发一个普通的Nim程序来说,没有问题,但要开发GUI程序...具体为什么会出错,我还不是很清楚 (有可能那个MingW的安装包是64位的,也有可能那个安装包是阉割版的) 所以我们要自己安装一个MingW, Nim官方网站推荐到MingW官网去下载64位的安装包,...位的MinGW image.png 我现在也不是很清楚为什么64位的MingGW为什么不行 安装好之后需要配置一下环境变量,把如下路径配置到环境变量中: C:\TDM-GCC-32\bin (当然你如果装到别的路径下去了...,那就另当别论) 然后你应该把Nim的bin路径也配置到环境变量中: C:\Nim\bin 这样你就可以使用命令行来编译你的程序了 (你用aporia官方提供的IDE来编译你的程序,默认是没有设置--app

    2.9K50

    我打破了 React Hook 必须按顺序、不能在条件语句中调用的枷锁!

    chaos 破解限制 有没有办法破解限制呢? 如果要破解全局索引递增导致的 bug,那么我们可以考虑换种方式存储 Hook 状态。...ok 自动编译 事实上 React 团队也考虑过给每次调用加一个 key 值的设计,在 Dan Abramov 的 为什么顺序调用对 React Hooks 很重要?...但我的想法是,能不能借助 babel 插件的编译能力,实现编译期自动为每一次 Hook 调用都注入一个 key, 伪代码如下: traverse(node) { if (isReactHookInvoking...也许有一些我没有考虑周到的地方,对此有任何想法的同学都欢迎加我微信 sshsunlight[4] 讨论,当然单纯的交个朋友也没问题,大佬或者萌新都欢迎。...我并不希望 React 取消掉这些限制,我觉得这也是设计的取舍。 如果任何子函数,任何条件表达式中都可以调用 Hook,代码也会变得更加难以理解和维护。

    1.8K20

    我打破了 React Hook 必须按顺序、不能在条件语句中调用的枷锁

    key 值的设计,在 Dan Abramov 的 为什么顺序调用对 React Hooks 很重要?...但我的想法是,能不能借助 babel 插件的编译能力,实现编译期自动为每一次 Hook 调用都注入一个 key, 伪代码如下: traverse(node) { if (isReactHookInvoking...也许有一些我没有考虑周到的地方 总结 本文只是一篇探索性质的文章: 介绍 Hook 实现的大概原理以及限制 探索出修改源码机制绕过限制的方法 其实本意是帮助大家更好的理解 Hook。...我并不希望 React 取消掉这些限制,我觉得这也是设计的取舍。 如果任何子函数,任何条件表达式中都可以调用 Hook,代码也会变得更加难以理解和维护。...感谢大家 我是 ssh,目前就职于字节跳动的 Web Infra 团队,目前团队在北上广深杭都还缺人(尤其是北京)。

    1K20

    Nim教程【十五】【完结】

    模版 模版是Nim语言中的抽象语法树,它是一种简单的替换机制,在编译期被处理 这个特性使Nim语言可以和C语言很好的运行在一起 像调用一个方法一样调用一个模版 请看如下代码: template `!...考虑一个简单的PROC进行日志记录: const   debug = true proc log(msg: string) {.inline.} =   if debug: stdout.writeln...body参数 这段代码可以帮助开发人员避免“忘记关闭文件”的错误 宏 Nim语言的宏提供了一个高级的编译期的替换功能 Nim语言的宏不能替换语言本身的语法, 但这并不是什么缺憾,因为Nim语言本身已经足够灵活了...如果外部接口在编译期不可用,那么你就必须用纯Nim语言写宏 (这估计就是在说Nim和C混合编程的时候要注意的事情) 你可以使用Nim代码编写任何形式的宏,编译器会在编译期把他们翻译成真正的Nim代码。...,你可以找到关于AST的帮助说明 你一旦写了一个宏, 那么你有两种办法可以使用这个宏 像调用一个方法一样调用一个宏 通过一种特殊的语法调用宏(macrostmt声明宏) 表达式宏 下面的代码实现了一个可变参数数量的宏

    96680

    Nim教程【十四】

    网友@沉没捕鱼,赞助了一台服务器 这个系列的教程写完之后,我们就要开始着手搭建Nim的社区了~ 异常 Nim中的异常类型是对象类型 根据惯例,Nim中的异常类型的命名都应该以Error后缀结尾 在system...except语句 如果后面的except语句没有明确列出这个异常 那么就会后自行最后一个空except语句 这看起来类似if else语句 如果存在finally语句, 那finally语句块内的代码无论如何都会被执行的...如果一个异常没有得到处理 那么这个异常会从堆栈向上传播 这就意味着,调用链上的方法有可能不会被执行 (如果他被执行了,那么他一定在一个finally子句中) 如果你需要访问异常对象 可以使用system...如果你用{.raises.}对某一个方法进行了注解 那么在编译期就会检测这个方法(或这个方法所调用到的方法)会不会抛出了某个异常 如果会,则编译不通过 示例代码如下: proc complexProc...这一段我也没怎么看明白,大家自己看原文吧先 泛型 Nim语言的方法参数化、迭代器、等特性都是靠语言本身的泛型特性实现的 这个特性对于强类型容器是非常有用的 来看一下代码 type   BinaryTreeObj

    83560

    Nim编码风格

    介绍 Nim语言不限制开发人员使用哪种具体的编码风格, 但为了社区的发展,在编写一些标准库的时候还是应该遵从统一的编码风格 这篇文章会列出一系列的编码风格准则,供大家参考。...跟python相似,python的编码风格在不断演化、改变, nim语言也是这样,随着时间的推移,这个编码风格准则也会改变。...在编写nim的基础类库、编译器、官方工具的时候, 强制要求遵从这些编码风格准则 间距和空白约定 一行的代码量不应该超过80个字符,一行代码量太多的话不利于阅读; 应该使用两个空格来制定缩进,不能使用...result变量 (别忘了nim语言的每个方法中都有一个隐藏的result变量) 一般情况下推荐返回一个[]或者""或者抛出一个异常,而不是返回一个nil 大部分时候用proc(方法)就能满足业务需求了....} = 如果你需要调用一个方法,而调用语句很长的话 你可以把每个参数都分做一行,也可以多个参数占用一行(与第一行的左括号对齐) # 对于复杂方法调用的时候,推荐每个参数占用一行. readDirectoryChangesW

    1K80

    Nim教程【十三】

    类型转换 Nim支持显示类型转换和隐式类型转换 使用casts操作符完成显示类型转换工作, 显示类型转换工作是编译期完成的工作,是位模式的 隐式类型转换也是编译期完成的工作,不是位模式的 让我们来看一下下面的代码...访问无效的对象属性会引发一个异常 方法 对象的方法有两个缺点 程序员难以在运行期为一个类型增加方法(或者只能用丑陋的方法才能做到) 很多时候方法的参数是不确定的 Nim为了避免类似的问题,...不分配方法到类中 后面我们将了解Nim的动态绑定方法的特性 方法调用 可以使用点操作符调用对象的方法 obj.method(args) 而不是 method(obj,args) 如果没有参数,则可以省略小括号...obj.method 方法调用是不受对象限制的,来看看下面的代码: echo("abc".len) # is the same as echo(len("abc")) echo("abc".toUpper...所以最后一个collide方法优于前面两个collide方法 毕竟a和b都是Unit类型的 注意:Nim不产生虚方法表(C#.net是需要虚方法表的), 但是会生成调用树(这样做可以提升性能表现)

    94960

    我用编程模拟疫情的传播来告诉你: 为什么现在的你还不能出门

    还没有到真正的时候。...看完视频你就明白为什么不能出门了,千万不要放松警惕!(@Ele实验室 ) 在家憋了一段时间的人们,耐心也在一点一点消磨中。很多人已经忍不住开始想蠢蠢欲动了。...他们总有一套自己的理论:我们城市才一点确诊病人,而且在距离我们很远的地方,我就出去一会儿,哪有那么巧合,就感染上了。没事儿的!大街上都没人,我戴着口罩又没事。...因此通过这一次的疫情防控,为了你、我、他,请以后感冒发烧生病之后,能够带个口罩,减少传染率。因为不知道你体内的这一个病毒威力如何。 ?...当确诊病例不再上升,没有疑似病例的出现,那么我们就基本可以清楚疫情已经基本得到控制。那时才是真正春天的到来。 切记切记: 普通人对抗疫情最好的办法就是:能不出门就不出门。

    2.1K10

    【手记】走近科学之为什么明明实现了IEnumerable的类型却不能调用LINQ扩展方法

    比如Json.NET的JObject明明实现了IEnumerable,具体来说是IEnumerable>,按说JObject类型的对象是可以直接调用...Select、Where等linq扩展方法的,但偏偏就是不行,代码如下: using System.Linq; ... var jobj = new JObject(); var xxx = jobj.Select...(x=>x); //报错:JObject未包含Select定义,也不存在第1个参数为JObject的Select扩展方法... foreach(var x in jobj) { } //可以 var xxx...= ((IEnumerable>)jobj).Select(x=>x); //也可以 究竟是人性的扭曲还是道德的沦丧?...,等于JObject直接和间接实现了两个不同的IEnumerable,当.Select的时候编译器不能确定调用哪个类型的Select,所以就这样了。

    80510

    为什么我建议线上高并发量的日志输出的时候不能带有代码位置

    如果大家发现网上有抄袭本文章的,欢迎举报,并且积极向这个 github 仓库 提交 issue,谢谢支持~ 本文是“为什么我建议”系列第二篇,本系列中会针对一些在高并发场景下,我对于组内后台开发的一些开发建议以及开发规范的要求进行说明和分析解读...往期回顾: 为什么我建议在复杂但是性能关键的表上所有查询都加上 force index 在业务一开始上线的时候,我们线上日志级别是 INFO,并且在日志内容中输出了代码位置,格式例如: 2022-03...在上面我给出的线程堆栈的例子中,调用打印日志方法的代码位置信息就是这一行:at com.xxx.apigateway.filter.AccessCheckFilter.filter(AccessCheckFilter.java...模拟两种方式获取调用打印日志方法的代码位置,与不获取代码位置会有多大性能差异 以下代码我参考的 Log4j2 官方代码的单元测试,首先是模拟某一调用深度的堆栈代码: 然后,编写测试代码,对比纯执行这个代码...由此,我建议:对于微服务环境,尤其是响应式微服务环境,堆栈深度非常深,如果会输出大量的日志的话,这个日志是不能带有代码位置的,否则会造成严重的性能衰减。

    1.4K20
    领券