Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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,对于单行块,更喜欢{…}而不是do…end。但是错误_Ruby_Lint_Rubocop - Fatal编程技术网

Ruby,对于单行块,更喜欢{…}而不是do…end。但是错误

Ruby,对于单行块,更喜欢{…}而不是do…end。但是错误,ruby,lint,rubocop,Ruby,Lint,Rubocop,我在.rb类文件中有以下代码: field:user,Types::UserType do resolve->(_obj,_args,ctx){ctx[:user]}end 我需要的是使用{}从单行中删除do和end [Style/BlockDelimiters]对于单行块更喜欢{…}而不是do…end。 但我不明白为什么它会抛出这个错误: [ruby] syntax error, unexpected '{', expecting '(' [ruby] syntax error, unexpe

我在.rb类文件中有以下代码:

field:user,Types::UserType do resolve->(_obj,_args,ctx){ctx[:user]}end

我需要的是使用
{}
从单行中删除
do
end

[Style/BlockDelimiters]对于单行块更喜欢
{…}
而不是
do…end

但我不明白为什么它会抛出这个错误:

[ruby] syntax error, unexpected '{', expecting '('
[ruby] syntax error, unexpected '}', expecting keyword_end
RuboCop版本
要安抚Rubocop,请切换到以下任一选项:

field :user, Types::UserType do
  resolve ->(_obj, _args, ctx) { ctx[:user] }
end
或者这个:

field(:user, Types::UserType) { resolve ->(_obj, _args, ctx) { ctx[:user] } }

我认为前者要比后者干净得多,但这取决于你。

为了安抚Rubocop,请切换到以下任一选项:

field :user, Types::UserType do
  resolve ->(_obj, _args, ctx) { ctx[:user] }
end
或者这个:

field(:user, Types::UserType) { resolve ->(_obj, _args, ctx) { ctx[:user] } }

我认为前者要比后者干净得多,但这取决于你。

“我需要的是删除”-你不需要一开始就盲目地遵循rubocop所说的一切。如果您仍然希望满足它,请正确管理运算符优先级,可能在
Types::UserType
@mudasobwa周围加上括号。我认为它应该围绕整个参数列表,例如
字段(:user,Types::UserType)做#etc
,也就是说它读起来最好是两行或者使用更自然的内联块语法。
字段(:user,Types::UserType){resolve->(_obj,_args,ctx){ctx[:user]}
@engineersmnky,什么是
更自然的内联块语法
?参见@gabrielhilal注释。使用大括号
{…}
表示内联块更自然(阅读惯用语)。内部解析器不允许使用
do…end
作为内联块,只是通常认为它不是合适的样式“我需要的是删除”-您不需要一开始就盲目地遵循rubocop所说的一切。如果您仍然希望满足它,请正确管理运算符优先级,可能在
Types::UserType
@mudasobwa周围加上括号。我认为它应该围绕整个参数列表,例如
字段(:user,Types::UserType)做#etc
,也就是说它读起来最好是两行或者使用更自然的内联块语法。
字段(:user,Types::UserType){resolve->(_obj,_args,ctx){ctx[:user]}
@engineersmnky,什么是
更自然的内联块语法
?参见@gabrielhilal注释。使用大括号
{…}
表示内联块更自然(阅读惯用语)。内部解析器不允许将
do…end
用作内联块,只是一般认为它不合适style@engineersmnky那么我站对了。我想知道他们什么时候修好的。大概是1.9。@engineersmnky相同。也许我把这和语法上的其他怪癖混淆了。我已经更新了答案。后者在2.4上无效。这可能是因为那里的绑定不明确,不清楚该块是否提供给
Types::UserType
字段
。我已经用有效的语法对其进行了更新。@engineersmnky我站得对。我想知道他们什么时候修好的。大概是1.9。@engineersmnky相同。也许我把这和语法上的其他怪癖混淆了。我已经更新了答案。后者在2.4上无效。这可能是因为那里的绑定不明确,不清楚该块是否提供给
Types::UserType
字段
。我已经用有效的语法更新了它。