Ruby “与”的区别是什么;你好;。长度和“;你好。长度?

Ruby “与”的区别是什么;你好;。长度和“;你好。长度?,ruby,Ruby,当我在ruby控制台中运行以下示例时,我感到惊讶。它们都产生相同的产量 "hello".length 及 ruby控制台如何删除空格并提供正确的输出?您可以在任何地方放置空格,解释器将查找行尾。例如: 有效的 无效的 "hello" .length result = true || false 解释器看到一行末尾的点,知道后面必须有东西。而在第二种情况下,它认为生产线已经完成。一行中的空间量也是如此。解释器如何删除空格重要吗?重要的是你知道这种行为 如果你想你甚至可以 "hello

当我在ruby控制台中运行以下示例时,我感到惊讶。它们都产生相同的产量

"hello".length


ruby控制台如何删除空格并提供正确的输出?

您可以在任何地方放置空格,解释器将查找行尾。例如:

有效的

无效的

"hello"
  .length
result = true
  || false
解释器看到一行末尾的点,知道后面必须有东西。而在第二种情况下,它认为生产线已经完成。一行中的空间量也是如此。解释器如何删除空格重要吗?重要的是你知道这种行为

如果你想你甚至可以

"hello"   .      length
而且它仍然有效

我知道这不是你问题的答案,但“如何”重要吗

编辑:我在下面的评论中被更正了。上面给出的多行示例在脚本而不是IRB中运行时都有效。我把他们和接线员搞混了。其中,以下内容在运行脚本时也适用:

有效的

有效的

无效的

"hello"
  .length
result = true
  || false

你可以把空格放在任何你想放的地方,解释器会寻找行尾。例如:

有效的

无效的

"hello"
  .length
result = true
  || false
解释器看到一行末尾的点,知道后面必须有东西。而在第二种情况下,它认为生产线已经完成。一行中的空间量也是如此。解释器如何删除空格重要吗?重要的是你知道这种行为

如果你想你甚至可以

"hello"   .      length
而且它仍然有效

我知道这不是你问题的答案,但“如何”重要吗

编辑:我在下面的评论中被更正了。上面给出的多行示例在脚本而不是IRB中运行时都有效。我把他们和接线员搞混了。其中,以下内容在运行脚本时也适用:

有效的

有效的

无效的

"hello"
  .length
result = true
  || false

这与控制台的关系不如与编译器如何解析语言本身的关系大

大多数语言的解析方式都是首先将要解析的项分组为标记。然后,编译器被定义为期望某个令牌序列来解释每个编程语句

因为编译器只是在寻找一个令牌序列,所以两者之间是否有空格并不重要

在本例中,编译器正在查找:

STRING DOT METHOD_NAME
因此,无论你写的是
“hello”.length,还是
“hello”,都无关紧要。长度
。两者中都存在相同的令牌序列,这就是编译器所关心的

如果您对Ruby源代码中如何定义这些令牌序列感到好奇,可以从第1042行开始查看
parse.y

这是一个使用编写的文件,这是一种用于定义解析器的语言


即使不知道任何关于YACC的信息,您也应该能够通过稍微查看一下文件来了解它的工作原理。

这与控制台的关系不如与编译器如何解析语言本身的关系大

大多数语言的解析方式都是首先将要解析的项分组为标记。然后,编译器被定义为期望某个令牌序列来解释每个编程语句

因为编译器只是在寻找一个令牌序列,所以两者之间是否有空格并不重要

在本例中,编译器正在查找:

STRING DOT METHOD_NAME
因此,无论你写的是
“hello”.length,还是
“hello”,都无关紧要。长度
。两者中都存在相同的令牌序列,这就是编译器所关心的

如果您对Ruby源代码中如何定义这些令牌序列感到好奇,可以从第1042行开始查看
parse.y

这是一个使用编写的文件,这是一种用于定义解析器的语言


即使不知道任何关于YACC的信息,您也应该能够通过稍微查看一下文件来了解它是如何工作的。

有时空白会带来歧义,例如
example(arg)
example(arg)
可能会根据上下文进行不同的解释。一般来说,最好避免在不必要的地方放置。是的@tadman。说得好。这与编译器无法在编程语句的两个或多个可能的解决方案之间消除歧义(花哨的词,表示“无法读懂程序员的心思”)有关。这实际上与控制台有关
irb
对空白的解释与Ruby本身不同。将
y='pancakes'\n.length
转储到
irb
中会导致问题,但在Ruby中这很好。@muistooshort Ok,你们这些挑剔的人;)今天在这里什么都逃不掉:-/你赢了。有时空白会引起歧义,比如
example(arg)
,而
example(arg)
可能会根据上下文的不同而有不同的解释。一般来说,最好避免在不必要的地方放置。是的@tadman。说得好。这与编译器无法在编程语句的两个或多个可能的解决方案之间消除歧义(花哨的词,表示“无法读懂程序员的心思”)有关。这实际上与控制台有关
irb
对空白的解释与Ruby本身不同。将
y='pancakes'\n.length
转储到
irb
中会导致问题,但在Ruby中这很好。@muistooshort Ok,你们这些挑剔的人;)今天在这里什么都逃不了:-/你赢了。嗯,
“hello”\n.length
一个完全有效
irb
与Ruby本身没有完全相同的解析规则。用自己的剧本试试看