Ruby on rails 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
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(调用方法的值,
ifnil
)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(调用方法的值,
ifnil
)self
- 方法名称作为符号
- 0个或多个参数
顺便说一下,我本可以提醒你:
Lint/AmbiguousOperator:不明确的正数运算符。将方法插入括号中
参数,如果它肯定是正数运算符,或者在
若它应该是加法,则为+的右边。
(姓+名+姓)
^
考虑将其添加到您的工作流中。ooh-TIL
ruby\u解析器
-太棒了!非常感谢您的详细解释!我尊重你的知识ooh,直到ruby\u解析器
-太棒了!非常感谢您的详细解释!我尊重你的知识