1

ルビー初心者です!そして、「!」の使い方を学ぼうとしています。.

私はそれを知っています!ユーザーの文字列がその場で変更されるように含まれています。それ以外の場合、Ruby は user_input のコピーを作成し、代わりにそれを変更します。

しかし、次の場合、両方のプログラムで同じ出力が得られます.なぜですか?

print "Please Enter your Input"
user_input = gets.chomp
user_input.downcase!

print "Please Enter your Input"
user_input = gets.chomp
user_input.downcase
4

3 に答える 3

4

Ruby では、前髪 (!) を使用して、呼び出しているメソッドが であることをプログラマーに知らせますdestructive。これは Ruby の言い方です。「このメソッドは、呼び出されたオブジェクトを変更します!」。StringArray,Enumerable` などのクラス の安全なメソッドの多くには、対応する破壊的なメソッドがあります。

例:

my_str = "Hello, World!"
my_str.downcase # => "hello, world!"
my_str # => "Hello, World!"

my_str = "Goodbye, World!"
my_str.downcase! # => "goodbye, world!"
my_str #> "goodbye, world!"

ご覧のとおり、どちらのメソッドも文字列の小文字のバリアントを返しますが、downcase!実際にはmy_str永続的に変更されます。

もっと多くの言語が提供されることを望むのは、Ruby の非常に便利な側面です。

また、破壊的なメソッドはインプレースで動作するため、新しいオブジェクトを返さなければならない安全なメソッドよりも一般的に高速でメモリ効率が高いことも言及する価値があると思います。したがって、可能な限りmy_string.downcase!を優先する必要があります。my_string = my_string.downcase

于 2013-05-19T02:25:49.267 に答える
1

どちらのメソッドも同じように動作しますが、返されるオブジェクトは異なります。

downcaseの変更されたコピーを返しますuser_input。というか、user_inputそのままです。

downcase!変更されたものを返しますuser_input。のコピーを生成しないため、これによりメモリ効率が向上することに注意してくださいuser_input

どちらの場合も、 の小文字バージョンを返しuser_inputます。そのため、同じ出力が得られます。

Ruby の bang メソッドの詳細については、このブログ投稿を参照してください。

h番目

于 2013-05-18T20:45:41.843 に答える
1
print "Please Enter your Input"
user_input = gets.chomp
user_input.downcase!

user_input値はユーザーが入力したもので、小文字です

print "Please Enter your Input"
user_input = gets.chomp
user_input.downcase

user_input値はユーザーが入力したものです

違いは、出力user_inputされるものではなく、 の値にあります。

于 2013-05-18T20:35:54.793 に答える