2016-12-27 59 views
0

分割聲明成多行我要聲明數組分成2條不同的線路在RUBY:無法從數組在紅寶石

statement = ["Statement1", "Statement2"] 

這是怎麼了分裂陣列

result = statement.split(", ") 

我想要的輸出是:

Statement1 
Statement2 

但我得到的錯誤是:

undefined method `split' for ["Statement1", "Statement2"]:Array (NoMethodError) 

有人可以幫我嗎? 在此先感謝

+0

split沒有爲列表定義。它僅用於字符串。 – Peaceful

+0

那麼我應該用什麼來將它分成2個不同的行? –

+0

我真的很抱歉給你一半的問題。我想要在Ruby –

回答

4

您可以在陣列上進行迭代。

stmtAry = ["Statement1", "Statement2"] 
stmtAry.each{|i| puts i} 

如果您不需要任何其他操作而不是打印輸出,您可以直接輸出每個語句,而無需迭代它們。

stmtAry = ["Statement1", "Statement2"] 
puts stmtAry 

兩個代碼提供相同的輸出:

輸出:

Statement1 
Statement2 
+1

['IO#puts'](https://ruby-doc.org/core-2.2.3/IO.html#method-i-puts)與'Array'已經將每個元素放在一行中需要迭代使用'#each'。 – engineersmnky

+0

@engineersmnky我根據您的評論 –

3

它不走更短:

puts statement 
# Statement1 
# Statement2 

puts documentation

如果使用數組參數調用,則將每個元素寫入新行。

如果你想從你的陣列只是一個字符串,你可以使用Array#join,這是String#split相反:

statement.join("\n") 

它返回一個字符串:

"Statement1\nStatement2" 

時與看跌期權顯示:

Statement1 
Statement2 
1

您正在嘗試調用split Array類的方法,但Array類沒有此方法。

您可以檢查通過使用這種方式

statement = ["Statement1", "Statement2"] 
statement.methods 
[:inspect, :to_s, :to_a, :to_h, :to_ary, :frozen?, :==, :eql?, :hash, :[], :[]=, :at, :fetch, :first, :last, :concat, :<<, :push, :pop, :shift, :unshift, :insert, :each, :each_index, :reverse_each, :length, :size, :empty?, :find_index, :index, :rindex, :join, :reverse, :reverse!, :rotate, :rotate!, :sort, :sort!, :sort_by!, :collect, :collect!, :map, :map!, :select, :select!, :keep_if, :values_at, :delete, :delete_at, :delete_if, :reject, :reject!, :zip, :transpose, :replace, :clear, :fill, :include?, :<=>, :slice, :slice!, :assoc, :rassoc, :+, :*, :-, :&, :|, :uniq, :uniq!, :compact, :compact!, :flatten, :flatten!, :count, :shuffle!, :shuffle, :sample, :cycle, :permutation, :combination, :repeated_permutation, :repeated_combination, :product, :take, :take_while, :drop, :drop_while, :bsearch, :any?, :pack, :entries, :sort_by, :grep, :find, :detect, :find_all, :flat_map, :collect_concat, :inject, :reduce, :partition, :group_by, :all?, :one?, :none?, :min, :max, :minmax, :min_by, :max_by, :minmax_by, :member?, :each_with_index, :each_entry, :each_slice, :each_cons, :each_with_object, :chunk, :slice_before, :slice_after, :slice_when, :lazy, :nil?, :===, :=~, :!~, :class, :singleton_class, :clone, :dup, :itself, :taint, :tainted?, :untaint, :untrust, :untrusted?, :trust, :freeze, :methods, :singleton_methods, :protected_methods, :private_methods, :public_methods, :instance_variables, :instance_variable_get, :instance_variable_set, :instance_variable_defined?, :remove_instance_variable, :instance_of?, :kind_of?, :is_a?, :tap, :send, :public_send, :respond_to?, :extend, :display, :method, :public_method, :singleton_method, :define_singleton_method, :object_id, :to_enum, :enum_for, :equal?, :!, :!=, :instance_eval, :instance_exec, :__send__, :__id__] 

在調用類的方法是否存在或不那麼有這沒有split方法上面的響應,這就是爲什麼你收到此錯誤。

因此,如果您遇到任何問題在未來這樣的,它會幫助你。

+0

你也可以使用'Array.public_method_defined更新的答案?(:分割)#=> FALSE'這會告訴你,如果是類或類的實例有通過名稱定義的方法(排除私人和受保護的方法)。 – engineersmnky