数组 – 在array.each中的Ruby if else
这里是
Ruby的新手.我试图在数组中放一个if else语句,如果某个模数== 0,发送一个字符串,对于我的生活,我无法在任何地方找到它.我相信有人会发现它非常简单.
a = *(1..100) a.each { |i| puts "three" if i % 3 == 0 elsif puts "five" if i % 5 == 0 else puts i} 只是不确定正确的语法.仍然是ruby的新手,我正在尝试学习语法.上学期上了C课,我的大脑一直想要用C语法. 当我离开时 a = *(1..100) a.each { |i| puts "three" if i % 3 == 0} 它工作正常,只是想弄清楚如何添加if else.感谢帮助. 以下答案非常有用.我试图进一步将其称为函数.它一直返回5,而不是“五”,或3,而不是“三”. 这是我的功能: def array_mod a = *(1..100) a.each { |i| if i % 3 == 0 && i % 5 == 0; i = "fifteen" elsif i % 3 == 0; i = "three" elsif i % 5 == 0; i = "five" else i = i end } 结束 这是我试图称呼它. require "minitest/autorun" require_relative "array_modulus.rb" class TestArrayFunction < Minitest::Test def test_array1 results = array_mod assert_equal(100,results.length) end def test_array2 results = array_mod assert_equal("three",results[2]) end end 我被告知它没有更新我的阵列.再次感谢. 解决方法
Ruby中条件表达式的语法是:
if c_1 then e_1 elsif c_2 then e_2 elsif c_3 then e_3 … elsif c_n then e_n else e_nplus1 end 其中c_1 … c_n和e_1 … e_nplus1可以是任意Ruby表达式. 可以使用表达式分隔符(即;或换行符)而不是then关键字来分隔条件表达式的各个部分. 用分号(这种用法是非惯用的): if c_1; e_1 elsif c_2; e_2 elsif c_3; e_3 … elsif c_n; e_n else e_nplus1 end 换行: if c_1 e_1 elsif c_2 e_2 elsif c_3 e_3 # … elsif c_n e_n else e_nplus1 end 如果您使用换行符,您也可以选择使用then关键字,但这也是非惯用的: if c_1 then e_1 elsif c_2 then e_2 elsif c_3 then e_3 # … elsif c_n then e_n else e_nplus1 end 因此,在您的情况下,正确的语法将是: # idiomatic a.each { |i| if i % 3 == 0 then puts "three" elsif i % 5 == 0 then puts "five" else puts i end } # non-idiomatic a.each { |i| if i % 3 == 0; puts "three" elsif i % 5 == 0; puts "five" else puts i end } # idiomatic a.each { |i| if i % 3 == 0 puts "three" elsif i % 5 == 0 puts "five" else puts i end } # non-idiomatic a.each { |i| if i % 3 == 0 then puts "three" elsif i % 5 == 0 then puts "five" else puts i end } 但是,对于if / elsif这样的链,使用case表达式通常更惯用: # idiomatic case when c_1 then e_1 when c_2 then e_2 when c_3 then e_3 … when c_n then e_n else e_nplus1 end # non-idiomatic case when c_1; e_1 when c_2; e_2 when c_3; e_3 … when c_n; e_n else e_nplus1 end # idiomatic case when c_1 e_1 when c_2 e_2 when c_3 e_3 # … when c_n e_n else e_nplus1 end # non-idiomatic case when c_1 then e_1 when c_2 then e_2 when c_3 then e_3 # … when c_n then e_n else e_nplus1 end 在您的情况下,这将是这样的: # idiomatic a.each { |i| case when i % 3 == 0 then puts "three" when i % 5 == 0 then puts "five" else puts i end } # non-idiomatic a.each { |i| case when i % 3 == 0; puts "three" when i % 5 == 0; puts "five" else puts i end } # idiomatic a.each { |i| case when i % 3 == 0 puts "three" when i % 5 == 0 puts "five" else puts i end } # non-idiomatic a.each { |i| case when i % 3 == 0 then puts "three" when i % 5 == 0 then puts "five" else puts i end } 请注意,条件表达式(if和case)都是表达式,而不是语句. Ruby中没有语句,一切都是表达式,一切都评估为一个值.条件表达式求值为已采用的分支中的表达式的值. 所以,你也可以像这样写: # idiomatic a.each { |i| puts(if i % 3 == 0 then "three" elsif i % 5 == 0 then "five" else i end) } # non-idiomatic a.each { |i| puts(if i % 3 == 0; "three" elsif i % 5 == 0; "five" else i end) } # idiomatic a.each { |i| puts(if i % 3 == 0 "three" elsif i % 5 == 0 "five" else i end) } # non-idiomatic a.each { |i| puts(if i % 3 == 0 then "three" elsif i % 5 == 0 then "five" else i end) } # idiomatic a.each { |i| puts(case when i % 3 == 0 then "three" when i % 5 == 0 then "five" else i end) } # non-idiomatic a.each { |i| puts(case when i % 3 == 0; "three" when i % 5 == 0; "five" else i end) } # idiomatic a.each { |i| puts(case when i % 3 == 0 "three" when i % 5 == 0 "five" else i end) } # non-idiomatic a.each { |i| puts(case when i % 3 == 0 then "three" when i % 5 == 0 then "five" else i end) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |