程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了将参数传递给 Ruby 方法大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决将参数传递给 Ruby 方法?

开发过程中遇到将参数传递给 Ruby 方法的问题如何解决?下面主要结合日常开发的经验,给出你关于将参数传递给 Ruby 方法的解决方法建议,希望对你解决将参数传递给 Ruby 方法有所启发或帮助;

似乎可以通过在方法后附加参数并将两者用空格分隔来将参数传递给某些 Ruby 方法。我试图了解使这种情况发生的机制。这就是参数在命令行中传递给脚本的方式。为什么以下语句在 Ruby 中有效?

item = 'orange'
fruits = ['orange','grapefruit','apple']
x = fruits.include? item
puts x

为什么下面的语句不起作用?

item = 'orange'
fruits = ['orange','apple']

x = fruits.include? item ? 'You picked a fruit' : 'You dID not pick a fruit'

puts x

解决方法

使用 Ripper 检查 AST

在 Ruby 中,括号在很大程度上是可选的,除非需要避免歧义,例如将参数传递给采用块的方法时。在幕后,主线 Ruby 有很多移动部分,可以标记和解析您编写的代码。最有用的一个是 Ripper module(文档化的 here),它使您能够查看 Ruby 从您的代码中生成的抽象语法树。

这是 Ruby 看到的代码的两个版本。您可以从 S 表达式中看到失败版本与非失败版本不同。在 irb 中:

Ripper.sexp %q{x = fruits.include?(item) ? 'You picked a fruit' : 'You did not pick a fru
it'}
#=> 
[:program,[[:assign,[:var_field,[:@ident,"x",[1,0]]],[:ifop,[:method_add_arg,[:call,[:vcall,"fruits",4]]],[:@period,".",10]],"include?",11]]],[:arg_paren,[:args_add_block,[[:vcall,"item",20]]]],false]]],[@R_607_7101@g_literal,[@R_607_7101@g_content,[:@tString_content,"You picked a fruit",29]]]],"You did not pick a fruit",52]]]]]]]]
Ripper.sexp %q{x = fruits.include? item ? 'You picked a fruit' : 'You did not pick a frui
t'}
#=> 
[:program,[:command_call,11]],[[:ifop,20]]],28]]]],51]]]]]],false]]]]]

由于 Ruby 几乎将所有内容都视为返回值的表达式,因此操作顺序会影响解析器形成表达式的方式。三元运算符最终必须计算为三个表达式,如果您使用解析器认为不明确的语法,则会导致问题。

另见

  • parse.y

大佬总结

以上是大佬教程为你收集整理的将参数传递给 Ruby 方法全部内容,希望文章能够帮你解决将参数传递给 Ruby 方法所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。