Rubyでのyieldとreturnの使用法を理解するのを誰かが助けてくれますか?私はRubyの初心者なので、簡単な例を高く評価しています。
前もって感謝します!
returnステートメントは、他の同様のプログラミング言語で機能するのと同じように機能し、使用されているメソッドから戻るだけです。rubyのすべてのメソッドは常に最後のステートメントを返すため、returnの呼び出しをスキップできます。したがって、次のような方法が見つかる可能性があります。
def method
"hey there"
end
これは、実際には次のようなことを行うのと同じです。
def method
return "hey there"
end
一方yield
、メソッドのパラメータとして指定されたブロックを実行します。したがって、次のような方法を使用できます。
def method
puts "do somthing..."
yield
end
そして、次のように使用します。
method do
puts "doing something"
end
その結果、次の2行が画面に印刷されます。
"do somthing..."
"doing something"
それが少しそれをクリアすることを願っています。ブロックの詳細については、このリンクを確認してください。
yield
メソッドに関連付けられたブロックを呼び出すために使用されます。これを行うには、次のように、メソッドとそのパラメーターの後にブロック(基本的には中括弧で囲んだコード)を配置します。
[1, 2, 3].each {|elem| puts elem}
return
現在のメソッドを終了し、次のようにその「引数」を戻り値として使用します。
def hello
return :hello if some_test
puts "If it some_test returns false, then this message will be printed."
end
ただし、どのメソッドでもreturnキーワードを使用する必要はないことに注意してください。Rubyは、戻り値がない場合、評価された最後のステートメントを返します。したがって、これら2つは同等です。
def explicit_return
# ...
return true
end
def implicit_return
# ...
true
end
例を次に示しyield
ます。
# A simple iterator that operates on an array
def each_in(ary)
i = 0
until i >= ary.size
# Calls the block associated with this method and sends the arguments as block parameters.
# Automatically raises LocalJumpError if there is no block, so to make it safe, you can use block_given?
yield(ary[i])
i += 1
end
end
# Reverses an array
result = [] # This block is "tied" to the method
# | | |
# v v v
each_in([:duck, :duck, :duck, :GOOSE]) {|elem| result.insert(0, elem)}
result # => [:GOOSE, :duck, :duck, :duck]
そして、の例。これを使用して、数値がハッピーreturn
かどうかを確認するメソッドを実装します。
class Numeric
# Not the real meat of the program
def sum_of_squares
(to_s.split("").collect {|s| s.to_i ** 2}).inject(0) {|sum, i| sum + i}
end
def happy?(cache=[])
# If the number reaches 1, then it is happy.
return true if self == 1
# Can't be happy because we're starting to loop
return false if cache.include?(self)
# Ask the next number if it's happy, with self added to the list of seen numbers
# You don't actually need the return (it works without it); I just add it for symmetry
return sum_of_squares.happy?(cache << self)
end
end
24.happy? # => false
19.happy? # => true
2.happy? # => false
1.happy? # => true
# ... and so on ...
お役に立てれば!:)
def cool
return yield
end
p cool {"yes!"}
yieldキーワードは、ブロック内のコードを実行するようにRubyに指示します。この例では、ブロックは文字列を返します"yes!"
。メソッドで明示的なreturnステートメントが使用されましたcool()
が、これも暗黙的である可能性があります。