Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 数字与字符串/表达式与值_Ruby - Fatal编程技术网

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}"