Mik*_*ike 3 ruby arrays each if-statement
这里是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}
Run Code Online (Sandbox Code Playgroud)
只是不确定正确的语法.仍然是ruby的新手,我正在尝试学习语法.上学期上了C课,我的大脑一直想要用C语法.
当我离开时
a = *(1..100)
a.each { |i| puts "three" if i % 3 == 0}
Run Code Online (Sandbox Code Playgroud)
它工作正常,只是想弄清楚如何添加if else.感谢帮助.
以下答案非常有用.我试图进一步将其称为函数.它一直返回5,而不是"5",或3,而不是"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 }
Run Code Online (Sandbox Code Playgroud)
结束
这是我试图称呼它.
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
Run Code Online (Sandbox Code Playgroud)
我被告知它没有更新我的阵列.再次感谢.
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
Run Code Online (Sandbox Code Playgroud)
where 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
Run Code Online (Sandbox Code Playgroud)
换行:
if c_1
e_1
elsif c_2
e_2
elsif c_3
e_3
# …
elsif c_n
e_n
else
e_nplus1
end
Run Code Online (Sandbox Code Playgroud)
如果您使用换行符,您也可以选择使用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
Run Code Online (Sandbox Code Playgroud)
因此,在您的情况下,正确的语法将是:
# 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
}
Run Code Online (Sandbox Code Playgroud)
但是,对于这样一个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
Run Code Online (Sandbox Code Playgroud)
在您的情况下,这将是这样的:
# 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
}
Run Code Online (Sandbox Code Playgroud)
请注意,条件表达式(both 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)
}
Run Code Online (Sandbox Code Playgroud)