我一直在学习Ruby并在自我项目中使用Thor,我想知道,如何使用Thor分割参数。例如:
scaffold Post name:string title:string content:text
我想知道如何将name:string
,title:string
和content:text
拆分为具有“name”和“type”的对象数组。
答案 0 :(得分:1)
考虑您有一个文件scaffold.rb
,内容如下:
array = ARGV.map { |column_string| column_string.split(":").first }
puts array.inspect # or 'p array'
然后,如果我们运行ruby scaffold.rb name:string title:string content:text
,您将获得
["name", "title", "content"]
如果我们的代码为p ARGV
,则输出为["name:string", "title:string", "content:text"]
。因此,我们将获得我们传递的任何内容,ruby scaffold.rb
作为在代码内ARGV
变量中的空格分割的数组。我们可以在代码中按照自己的意愿操作这个数组。
免责声明:我不认识Thor,但想表明如何在Ruby中完成这项工作
答案 1 :(得分:1)
我的建议是使用Rails使用的任何东西,这样你就不会重新发明轮子。我在生成器源中挖了一下,发现rails使用GeneratedAttribute类将参数转换为对象。
从generator named_base来源,您会看到他们正在将参数拆分为':'并将其传递给Rails::Generators::GeneratedAttribute
:
def parse_attributes! #:nodoc:
self.attributes = (attributes || []).map do |key_value|
name, type = key_value.split(':')
Rails::Generators::GeneratedAttribute.new(name, type)
end
end
您不必使用GeneratedAttribute课程,但如果您需要,它就在那里。
答案 2 :(得分:-1)
"your:string:here".split(":") => ["your", "string", "here"]