【Ruby】Gold試験対策-できなかった問題
以下の出力結果になるような選択肢
[1,2,3].__(1)__ #=> 6
1.sum
2.inject(0){|sum, i| sum * i }
3.inject(0){|sum, i| sum + i }
4.add
RubyのSilverの流れだとsumとかaddとかいう便利なメソッドがあるんではないかなんて思ってしまうわけですが、そんなものはありません笑
addはSetクラスならあるみたいだけど、足すのではなく追加する方でした。
require 'set' Set[1,2,3].add 4 #=> #<Set: {1, 2, 3, 4}>
脇道にそれましたが、今回はinjectです。injectは引数に初期値と手続きを取ります。簡単なサンプル。
p [1, 2, 3].inject(0) {|sum, i| sum + i} p [1, 2, 3].inject {|sum, i| sum + i} p [1, 2, 3].inject(0, :+) p [1, 2, 3].inject(:+) # どれも6を出力。
初期値は省略可能で、省略すると配列の0番目が初期値として渡されます。
書き方は直感的ではないけど、使えればコードがスッキリしそうですね!!
以下のコードの実行結果
class Class1 def set_value(value) @value = value end def get_value return @value end end obj1 = Class1.new obj1.set_value("value1") puts obj1.get_value obj2 = Class1.new puts obj2.get_value
以下のコードの実行結果は?
var1 = :hello var2 = :hello puts var1.equal?(var2)
シンボルオブジェクトの問題。こたえはtrue。シンボルオブジェクトは文字列が同じならオブジェクトとしておなじ!
以下の宣言だと値はどう振られる?
a, b = [1, 2, 3, 4]
aに1、bに2が入る。可変長でないため配列をぶったぎることはできません。同時に宣言できる可変長変数は一つだけ。
a, *b, c = [1, 2, 3, 4] p a # 1 p b # [2, 3] p c # 4
injectにはまりすぎたせいで他のを書く時間がなくなってしまった…。