【问题标题】:Ruby syntax error when initiating an array of objects with no parentheses初始化不带括号的对象数组时出现 Ruby 语法错误
【发布时间】:2019-01-12 11:08:02
【问题描述】:

我收到了这个错误:

SyntaxError ((irb):8: 语法错误,意外 tSTRING_BEG,期待 ']')

Person.new “尼克”,

(irb):8: 语法错误,意外的 ',',期待输入结束

Person.new “尼克”,

执行以下代码时:

class Person
    def initialize(name)
        @name = name
    end
end

a = [
    Person.new "Nick",
    Person.new "James"
]

我知道如何解决它,我只是想知道它到底为什么会发生。

【问题讨论】:

  • 在应用@Jagdeep 的答案之前,请务必将initalize 更改为initialize
  • 大佬,你在使用initalizeinitialize的方法时有没有报错?。
  • @CarySwoveland 两者的错误相同。
  • 请注意以下几点:Person.new "Nick" #=> #<Person:0x00000000bfcea8 @name="Nick">,而[Person.new "Nick"] #=> SyntaxError: (irb):7: syntax error, unexpected tSTRING_BEG, expecting ']'...
  • @CarySwoveland:“大名鼎鼎,当您使用initalizeinitialize 方法时是否收到错误?” – 由于错误是SyntaxError,因此方法的名称是什么可能无关紧要(除非它在语法上无效),因为代码无法解析,因此永远不会运行,因此该方法永远不会被调用,因此它永远不会丢失或参数数量错误。

标签: ruby


【解决方案1】:

如果你运行a = ["hello" "there", "some" "where"],它将返回=> ["hellothere", "somewhere"]

这可能是因为它试图将字符串附加到类!

【讨论】:

  • 好点。我认为这是我在 ruby​​ 中更频繁地使用括号的一个很好的理由。
【解决方案2】:

问题是:

我知道如何解决它,我只是想知道它究竟为什么会发生


没有括号,它是模棱两可的:它可能同样意味着

  • [Person.new("Nick"), Person.new("James")],或
  • [Person.new("Nick", Person.new("James"))]

【讨论】:

  • 你认为Person.new("Nick", Person.new("James"))] 会起作用吗?
  • 没有给出我们可以看到的类定义......但这是一个语法错误;在解析时,语言不知道 Person.new 需要多少参数。注意问题是“为什么这是一个错误?”,而不是“我该如何解决这个问题?”
  • 在解析时,语言不知道 Person.new 需要多少个参数,确实如此,见本地表第一个参数值size。第二段代码只是引入了 NoMethodError。
【解决方案3】:

我认为这是因为 ruby​​ 在解释 Person.new 及其参数之间的空格时感到困惑。在名称周围使用括号()

a = [
  Person.new("Nick"),
  Person.new("James")
]

【讨论】:

  • “我认为”是一种观点,而不是答案。深入挖掘。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-15
  • 2011-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-18
  • 1970-01-01
相关资源
最近更新 更多