Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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 如果element.to_sym为空,则从数组中删除元素_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby 如果element.to_sym为空,则从数组中删除元素

Ruby 如果element.to_sym为空,则从数组中删除元素,ruby,ruby-on-rails-3,Ruby,Ruby On Rails 3,我有一个API类,它生成如下命令: class APIDocument ... def order @order = [] @document.template.order.split('_').each do |o| @order << o unless o.to_sym == '' end @order end ... end 任何帮助都会很好 o.to_sym在其中一种情况下等于' 你确定吗?我假设o是一个字符串,在

我有一个API类,它生成如下命令:

class APIDocument
  ...
  def order
    @order = []
    @document.template.order.split('_').each do |o|
      @order << o unless o.to_sym == ''
    end
    @order
  end
  ...
end
任何帮助都会很好

o.to_sym
在其中一种情况下等于
'

你确定吗?我假设
o
是一个
字符串
,在这种情况下,
to_sym
将始终产生一个
符号
。这意味着
o.to_sym
永远不会等于空的
字符串(
'

也许您正在寻找以下线索:

@orders = @document.template.order.split('_').delete_if { |s| s.empty? }
@订单字符串
:''.class=>Symbol
  • 在ruby中,字符串不同于符号。字符串是可变变量,但符号是不可变变量。符号对象与代码中的所有上下文相同
啊,感谢@August,这项工作:

def order
  @order = @document.template.order.split('_').delete_if { |o| self.send(o).blank? }
end

是的,没错。我喜欢你的解决方案,但我仍然得到返回的
o
,即使它等于
'
@emm
o.to_sym
可能永远不会等于
'
。可能它将等于
:''
(空符号)?因此
s.to_sym==:''
仍然返回空字符串。如何测试它?
s.to_sym==:”
只能返回
true
false
。八月,当谈到Ruby或任何其他编程语言所使用的规则时,从您的词汇表中可以看到类似“可能”、“可能”和“不可能”的词。“不能”这个词在这里起作用。我已经用一个有效的解决方案回答了我自己的问题,谢谢你,@August。你能写下
o.to_-sym='
,当你的意思是
=
,然后看
o_-to-sym
@order << o unless o.to_sym == :'' 
''.class => String
:''.class => Symbol
def order
  @order = @document.template.order.split('_').delete_if { |o| self.send(o).blank? }
end