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

为什么Crystal不能解析1 +1赋值的类型?

Crystal是一种静态类型的编程语言,它在编译时会对变量的类型进行严格的检查。在Crystal中,变量的类型必须在声明时就确定,并且不能随意改变。

当我们尝试将一个表达式的结果赋值给一个变量时,Crystal会根据表达式的类型来确定变量的类型。例如,当我们将一个整数表达式1 + 1赋值给一个变量时,Crystal会尝试推断表达式的类型为整数类型,并将这个类型应用于变量。

然而,Crystal不能解析1 + 1赋值的类型的原因是,表达式1 + 1的类型并不是一个确定的整数类型。在Crystal中,整数类型有多种不同的大小和符号,例如Int32、Int64、UInt32等。由于1 + 1的结果可以是任意大小的整数,Crystal无法确定应该使用哪种具体的整数类型来表示这个结果。

为了避免类型的不确定性,Crystal要求在赋值操作中明确指定变量的类型。因此,正确的写法应该是将表达式的结果赋值给一个明确指定类型的变量,例如:

代码语言:txt
复制
result : Int32 = 1 + 1

在这个例子中,我们明确指定了变量result的类型为Int32,Crystal可以正确解析1 + 1的类型为Int32,并将结果赋值给result变量。

总结起来,Crystal不能解析1 + 1赋值的类型是因为表达式的类型不确定,为了避免类型的不确定性,我们需要在赋值操作中明确指定变量的类型。

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

相关·内容

Python基础(1) 变量、赋值及数据类型

Python基础(1) 这篇文章我们介绍一下Python变量,赋值及其数据类型。...变量有一定命名规则: 首字符为字母或下划线 其余可为字母,数字和下划线 名字是区分大小写 名字不能是关键字或预定义标识符 下面我们来看一个,小例子: import random secret=...赋值 Python变量赋值时可以同时获取值与类型 Python 是动态类型语言 不需要显示声明,根据值确定类型 就像下面的例子一样,我们不需定义a与b类型,Python自动获取变量类型(type...Python数据类型 最后,我们再简要介绍一下Python几种数据类型(整型,布尔型,浮点型还有复数型)。 1....下图可以看出,Python会浮点型小数点后面数字过多,就会自动进1。而下面b就用科学计数法表示了105次方,用起来就会很简便。 4. 复数 实部+虚部 j 类型转换 1.

84330

为什么我在容器中不能 kill 1 号进程?

而容器中也是由init进程直接或间接创建了Namespace中其他进程。 linux信号 而为什么不能在容器中kill 1号进程呢?进程在收到信号后,就会去做相应处理。...如kill 1,通过kill向1号进程发送信号。在没有别的参数时这个信号类型默认为SIGTERM,是可以被捕获 SIGKILL(9) Linux 里两个特权信号之一,不能被忽略也不能被捕获。...运行命令 kill -9 1参数“-9”,就是指发送编号为 9 这个 SIGKILL 信号给 1 号进程。 为什么在容器中不能kill 1号进程? 对于不同程序,结果是不同。...如果信号被忽略了,那么 init 进程就不能收到指令了。 想要知道 init 进程为什么收到或者收不到信号,就要去看 sig_task_ignored()实现。...IMAGE COMMAND CREATED 重点总结 “为什么我在容器中不能 kill 1 号进程?”。

13410

1、ES6数组与对象解构赋值详解

八、知识拓展 1、ES6数组与对象解构赋值详解 数组解构赋值 基本用法 ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称之为解构(Destructuring) // 以前为变量赋值...var [x=1] = [undefined]; x //1 var [x=1] = [null]; x // null 如果默认值是一个表达式,那么这个表达式是惰性求值,即只有在用到时候,才会求值...上面的代码其实等价于下面的代码: let x; if([1][0] === undefined){ x = f(); }else{ x = [1][0]; } 默认值可以引用解构赋值其他变量,...对象解构赋值 1、最简单案例 看下面的案例 let person = { name: 'yhb', age: 20 } /* 注意:下面虽然看起来是创建了一个对象,对象中有两个属性...变量address 赋值给 冒号 后面的变量 {province},相当于下面的写法 let {province}=address 1 字符串解构赋值 1、字符串也可以解构赋值

74420

为什么M1芯片Mac电脑反而不能安装针对它特殊定制化软件

64位芯片架构,转向了M1芯片是Arm 64 ,就比较麻烦。...如果你有的M1芯片Mac电脑,你肯定是会选择jdk-19_macos-aarch64_bin.dmg ,因为 它可以顺利安装。...64位芯片架构java,并不需要特殊定制化软件java,但是你电脑拒绝安装传统。...有意思虽然我们没办法安装比较新java,但是可以安装比较旧传统x8664位芯片架构java 可以看到2019 ,而且这个时候M1芯片Mac电脑还没有面世,所以压根就没得选,就只能说安装传统...x8664位芯片架构java: 传统x8664位芯片架构java 果不其然,有了这个传统x8664位芯片架构java,马上在r里面需要使用rjava包就没有问题了。

1.2K10

面试题1(选择正确类型转换)

出现频率: ★★★★★ 【面试题解析】在Java中,整型、实型、字符型被视为简单数据类型,这些数据类型由低 到高级分別为:(byte,short,char)int long float double...简单数据类型之间转换又可以分为: 低级到高级自动类型转换; 高级到低级强制类型转换; 包装类过渡类型能够转换。...: output:99 ; 对于byte、short、char 3种类型而言,它们是平级,因此不能相互自动转换,可以使用下述强制类型转换,代码如下: short i=99; char c=(char...//F1.doubleValue()为Float类返回double值型方法 当希望把double型转换为int型时,代码如下所示: doubled1= 100.00; DoubleD1=new Double...(d1); int i1=D1.intvalue(); 当希望把int型转换为double型时,自动转换如下: int i1=200; double d1=i1 简单类型变量转换为相应包装类,可以利用包装类构造函数

72050

20次方为什么等于1

理解了十进制计数法,二进制计数法也很简单,计算机使用就是二进制计数法,计算机为什么使用二进制,是因为2进制计数法数字种类少,计算机结构能更简单,表示起来比较容易,比如电路断开电平高低等等。...有没有找出规律,其实就是k^n,当n每减1,数值就变成原来k分之一,所以10^0就是10^1十分之一,也就是1,5^0是5^1五分之一,也就是1,2^0是2^1二分之一,也是1,所以k^0=1。...看到这里你是不是会好奇标题为什么是0,其实上面这些基础都是0,如果没有0,就不会有按位计数法,0在其中起是占位作用。...在指数里0作用是统一标准,简化规则,否则就得特殊处理1这个数字,不能使用10^n或2^n来表示。 余数 余数就是做除法运算后剩下数,也叫剩数,开个玩笑。...10^100因为数值太大,电脑计算起来也很费力,所以不妨也先看看能不能找找规律。

1.1K20

深度神经网络权值初始化几种方式及为什么不能初始化为零(1

一个好权值初始值有以下优点: · 梯度下降收敛速度较快 · 深度神经中网络模型不易陷入梯度消失或梯度爆炸问题 该系列共两篇文章,我们主要讨论以下两个话题: 1为什么在线性回归和逻辑回归中可以采用...0初始化,而在神经网络中不能采用(实际上不光是0初始化,将权值初始化为任意相同值,都很有可能使模型失效); 2、常用三种权值初始化方法:随机初始化、Xavier initialization、He initialization...我们假设模型输入为[x1,x2,x3],隐含层数为1,隐含层单元数为2,输出为 y 模型如下图所示: ?...* x3 在所有的权值 w 和偏差值 b (可以看做是w10)初始化为 0 情况下,即计算之后: z1 = 0,z2 = 0 那么由于 a1 = g(z1) 、a2 = g(z2) 经过激活函数之后得到...a1 和 a2 也肯定是相同数了 即 a1 = a2 = g(z1) 则输出层:y = g(w20 * a0 + w21 * a1 + w22 *a2 ) 也是固定值了。

2.1K20

你不知道 JavaScript 中卷(1类型

..."}] data = JSON.parse(data); 上面一个示例,我们先是通过http调用得到一个json数据,然后解析得到一个数组,期间我们只声明了一个变量data 再看看强类型语言C#是怎么去实现上面这段代码...,json声明为一个String类型变量后,如果你赋值其他类型值,编译器就会提示错误。...且,同样是Json解析,C#还需要提前声明好了Post类,才能通过泛型去解析。...我们比较一下得出以下结论: 1、弱类型语言灵活,可以通过两行代码实现十几行代码功能 2、强类型语言非常啰嗦,但是可以使得开发过程中手误导致意外错误(变量名写错)不会跑到线上 类型转换 我们在实际开发中经常会去转换变量类型...例如,以下是使用toString.call()来判断一个值是否是数组示例: var arr = [1, 2, 3]; if (toString.call(arr) === "[object Array

27830

Why Taichi (1): 为什么设计新编程语言?

话题包括: 动机与工程实践 (本文) 为什么我们需要新编程语言 Taichi语言及其目标 Taichi实用主义设计决策 三类新语言抽象与编译器优化 反思 与其他编程系统关系 我们学到了什么 未来工作...为什么需要新视觉计算编程语言?...其中,性能提升来自使用SSE 4-wide向量化、用软件实现能够在 L-1 data cache 缓存全局稀疏数据结构上局部节点数据机制、循环展开等。...使用低精度 (low-precision)、量化 (quantized) 数据类型来节约内存空间与带宽逐渐变得流行,因为 1) GPGPU大行其道,但GPU内存有限 2) 现代处理器FLOPS富余而内存带宽紧缺...几个关键设计决策如下: 1 命令式 (imperative)。图形程序,特别是物理仿真,通常有较高性能诉求。这使得和函数式(functional)编程相比更接近硬件命令式编程更为合适。

1.4K30

手把手教你用 reflect 包解析 Go 结构体 - Step 1: 参数类型检查

,使用 type newType oldType 这样语句定义出来两个类型,虽然可以通过显式类型转换,但是直接进行赋值、运算、比较等等操作时,是无法通过,甚至可能造成 panic: package...但是我们可以说,str 和 string kind 是相同为什么呢?...这次,我们只允许指向一个结构体,同时,这个结构体不能为 nil。这一来,入参合法性检查代码挺长了,咱们把合法性检查抽成一个专门函数吧。...手把手教你用 reflect 包解析 Go 结构体 - Step 2: 结构体成员遍历 手把手教你用 reflect 包解析 Go 结构体 - Step 3: 复杂类型检查 --- 本文章采用 知识共享署名...原文标题:《手把手教你用 reflect 包解析 Go 结构体 - Step 1: 参数类型检查》 发布日期:2021-06-28 原文链接:https://cloud.tencent.com/developer

1.6K50

Java日期类时间从为什么是从1970年11日开始?

UNIX considers the epoch (when did time begin) to be midnight, January 1, 1970....是说java起源于UNIX系统,而UNIX认为1970年11日0点是时间纪元。...----------------------------------------------------------------------------- 但这依然没很好解释"为什么",出于好奇,继续...另外1年365天总秒数是31536000秒, 2147483647/31536000 = 68.1年 也就是说32位能表示最长时间是68年,而实际上到2038年01月19日03时14分07秒,便会到达最大时间...位来表示时间最大间隔是68年,而最早出现UNIX操作系统考虑到计算机产生年代和应用时限综合取了1970年11日作为UNIX TIME纪元时间(开始时间),而java自然也遵循了这一约束。

4.6K20
领券