Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.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 on rails rails语法错误:参数数目错误_Ruby On Rails_Ruby_Methods_Syntax_Arguments - Fatal编程技术网

Ruby on rails rails语法错误:参数数目错误

Ruby on rails rails语法错误:参数数目错误,ruby-on-rails,ruby,methods,syntax,arguments,Ruby On Rails,Ruby,Methods,Syntax,Arguments,在使用rails构建网站时,我发现了一个小语法错误,我真的不明白是什么导致了它 class User < ApplicationRecord has_secure_password has_many :posts, dependent: :nullify has_many :comments, dependent: :nullify validates :first_name, :last_name, presence: true, length: {maxim

在使用rails构建网站时,我发现了一个小语法错误,我真的不明白是什么导致了它

 class User < ApplicationRecord
   has_secure_password
   has_many :posts, dependent: :nullify
   has_many :comments, dependent: :nullify

   validates :first_name, :last_name, presence: true, length: {maximum: 30}
   validates :email, presence: true, uniqueness: true, format: /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i


   def full_name
     (first_name +" "+ last_name).titleize
   end

 end
它运行正常

虽然我知道我可以忽略它,但我很好奇空间是如何导致参数错误的,我想这不是没有参数的

我还通过在string类中创建自己的titleize方法在普通ruby中运行了相同的代码,它在没有空间的情况下运行良好。
真奇怪

当您将代码直接放在一元加号运算符和二元加号运算符旁边时,这可能介于二元加号运算符和一元加号运算符之间

一元加号和一元减号一样,比如
-2
,我相信你理解写
1-2
1-2
之间的区别

另一方面,标准的“ruby方式”是插值,而不是使用串联,因此您的行写得更好:

"#{first_name} #{last_name}".titleize

当您将代码直接放在一元加号运算符和二元加号运算符旁边时,这可能介于二元加号运算符和一元加号运算符之间

一元加号和一元减号一样,比如
-2
,我相信你理解写
1-2
1-2
之间的区别

另一方面,标准的“ruby方式”是插值,而不是使用串联,因此您的行写得更好:

"#{first_name} #{last_name}".titleize
您可以尝试消除对如何实际解析的疑虑

RubyParser.for_current_ruby.parse'(first_name+“”+last_name)
的结果是:

s(:call, nil,
         :first_name,
         s(:call, s(:call, s(:str, " "),
                           :+@),
                  :+,
                  s(:call, nil,
                           :last_name)))
实际上,您得到的是
名字((+)+姓氏)
,或者以一种更冗余/更有条理的方式,
self.first\u名字((“.++)。+(self.last\u名字))

这意味着在调用
first_name
方法时有一个参数,源于意外使用
+@
,即
上的一元加号。但是由于
first\u name
是一个属性获取程序(我想是吧?),并且不接受任何参数,因此您会得到一个
ArgumentError


为了帮助您解释此输出,调用S表达式包括:

  • :呼叫
  • subject(调用方法的值,
    nil
    if
    self
  • 方法名称作为符号
  • 0个或多个参数

顺便说一下,我本可以提醒你:

Lint/AmbiguousOperator:不明确的正数运算符。将方法插入括号中
参数,如果它肯定是正数运算符,或者在
若它应该是加法,则为+的右边。
(姓+名+姓)
^
考虑将其添加到您的工作流中。

您可以消除对其实际解析方式的疑虑

RubyParser.for_current_ruby.parse'(first_name+“”+last_name)
的结果是:

s(:call, nil,
         :first_name,
         s(:call, s(:call, s(:str, " "),
                           :+@),
                  :+,
                  s(:call, nil,
                           :last_name)))
实际上,您得到的是
名字((+)+姓氏)
,或者以一种更冗余/更有条理的方式,
self.first\u名字((“.++)。+(self.last\u名字))

这意味着在调用
first_name
方法时有一个参数,源于意外使用
+@
,即
上的一元加号。但是由于
first\u name
是一个属性获取程序(我想是吧?),并且不接受任何参数,因此您会得到一个
ArgumentError


为了帮助您解释此输出,调用S表达式包括:

  • :呼叫
  • subject(调用方法的值,
    nil
    if
    self
  • 方法名称作为符号
  • 0个或多个参数

顺便说一下,我本可以提醒你:

Lint/AmbiguousOperator:不明确的正数运算符。将方法插入括号中
参数,如果它肯定是正数运算符,或者在
若它应该是加法,则为+的右边。
(姓+名+姓)
^

考虑将其添加到您的工作流中。

ooh-TIL
ruby\u解析器
-太棒了!非常感谢您的详细解释!我尊重你的知识ooh,直到
ruby\u解析器
-太棒了!非常感谢您的详细解释!我尊重你的知识