Ruby 数字与字符串/表达式与值
当我键入以下内容时:Ruby 数字与字符串/表达式与值,ruby,Ruby,当我键入以下内容时: print "2+2 is equal to" +2+2 我收到一条错误消息,说我无法将数字转换为字符串,但键入时: print "2+2 is equal to", 2+2 它正在接受并显示: 2+2 is equal to4 这两者有什么区别?我觉得这不合逻辑。有人能解释一下吗 print "2+2 is equal to" + 2 + 2 在这里,您试图向字符串添加一个数字。这个操作毫无意义。这就像给猫添苹果一样。加法失败,但如果成功,则print将打印结果
print "2+2 is equal to" +2+2
我收到一条错误消息,说我无法将数字转换为字符串,但键入时:
print "2+2 is equal to", 2+2
它正在接受并显示:
2+2 is equal to4
这两者有什么区别?我觉得这不合逻辑。有人能解释一下吗
print "2+2 is equal to" + 2 + 2
在这里,您试图向字符串添加一个数字。这个操作毫无意义。这就像给猫添苹果一样。加法失败,但如果成功,则print
将打印结果
print "2+2 is equal to", 2 + 2
这里您告诉print
命令打印这个字符串以及这两个数字相加的结果。它知道如何打印字符串和数字。在这种情况下,字符串和数字不必混合在一起,它们是分开处理的。这就是这次行动成功的原因
你也可以让第一次手术成功。为此,必须明确表示希望将该数字作为字符串,以便两个加法操作数都是字符串,并且可以实际相加
print "2+2 is equal to" + (2 + 2).to_s
或
有些语言尽量友好,如果您要向字符串中添加数字,则会为您将数字字符串化。结果可以是。。。令人惊讶
Javascript:
"2 + 2 equals to " + 2 + 2
# => "2 + 2 equals to 22"
"2 + 2 equals to " + (2 + 2)
# => "2 + 2 equals to 4"
ruby不做这种把戏是好事:)
相当于:
print("2+2 is equal to" +2+2)
print("2+2 is equal to", 2+2)
您正在尝试将整数2
添加到字符串“2+2等于”
相当于:
print("2+2 is equal to" +2+2)
print("2+2 is equal to", 2+2)
这里print
接受两个参数,一个是字符串,另一个是表达式2+2
print "2+2 is equal to" + 2+2
失败,因为它试图在结果发送到打印
之前向字符串添加整数。毫无意义的行动。鉴于:
print "2+2 is equal to", 2+2
这是另一个手术。这里您将两个参数发送到打印。一个字符串和一个整数。内部print
对两个值调用to\s
从:
打印(obj,…)
→ <代码>零
依次将每个对象打印到$stdout
。[…]非字符串的对象将通过调用其to_s
方法进行转换
另一种方法是字符串插值,它也会自动调用到
:
print "2+2 is equal to #{2+2}"
每个人都指出了print
是如何工作的,所以我想我应该对+
有点了解
这两个操作员看起来是一样的,对吗
'2'+'2'
2+2
实际上,有两种截然不同的操作:
-这将参数连接到源字符串。参数必须是字符串李>
-这会将参数添加到源编号。参数必须是数字李>
那么,如果String#+只对String
对象起作用,那么我们如何能够打印不同类型的对象呢
有些类非常“类似字符串”,在大多数上下文中都可以作为字符串处理(例如Ruby 1.9之前的异常
),因为它们实现了到_str
(隐式转换)
我们还可以在我们自己的对象中实现to_s
,以允许它返回对象的字符串
表示(显式转换)
你可以在@DaveNewton上了解更多信息:谢谢。今晚我会做噩梦:)我建议你详细解释一下,“这个操作没有意义。”通过解释异常的技术原因:该方法要求其参数(此处4
)是字符串卡里·斯沃夫兰刚才edit@CarySwoveland我不确定我是否同意<代码>字符串#+
要求其参数为字符串是因为这里没有意义,而不是原因。@CarySwoveland:哦,顺便说一句,参数是2
,而不是4
:)啊,是的,2
。我必须修补字符串#+
以确认这是真的。:-)有时我会在最基本的事情上绊倒。我们看看我是否记得“从左到右,从左到右…”。哦,我确实用了“精心设计”这个词。
print "2+2 is equal to #{2+2}"