Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.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 如何检查参数是否为符号?_Ruby - Fatal编程技术网

Ruby 如何检查参数是否为符号?

Ruby 如何检查参数是否为符号?,ruby,Ruby,问题在标题中 我的参数可以是字符串或符号,根据它是什么,我希望执行不同的操作。有没有办法在Ruby中检查这个问题?另一个解决方案 def foo(arg) if arg.is_a?(Symbol) do_symbol_stuff else do_string_stuff end end def foo(arg) case arg when Symbol do symbol stuff when String do stri

问题在标题中

我的参数可以是字符串或符号,根据它是什么,我希望执行不同的操作。有没有办法在Ruby中检查这个问题?

另一个解决方案

def foo(arg)
  if arg.is_a?(Symbol)
    do_symbol_stuff
  else
    do_string_stuff
  end
end
def foo(arg)
  case arg
    when Symbol
      do symbol stuff
    when String
      do string stuff
    else
      do error stuff
  end
end

在Ruby中需要检查对象的类型是一种代码气味。这是一个标志,你应该重构你的参数是如何进入的。我同意,但这是一个非常简单的视图助手,我这样做的原因是,我可以以任何有效的形式发送我的参数,而不会导致异常。你可以只需arg=arg.to_sym,以确保你的参数的形式正确。这确实适用于字符串,但并非适用于所有可能的参数类型。像这样使用类#===方法:Symbol==arg。这当然是一个品味的问题,但我个人认为“如果arg是一个符号”比“如果arg等于符号”读起来更自然。