私はその質問を完全には理解していませんが、ここに少し説明があります。requireにオーバーロードされたバージョンが1つありPredefます:
def require(requirement: Boolean) //...
def require(requirement: Boolean, message: => Any) //...
2つ目は、タイプが原因で少し混乱しmessage: => Anyます。それが単純であるならば、それはおそらくより簡単でしょう:
def require(requirement: Boolean, message: Any) //...
2番目のパラメーターはもちろん、アサーションが満たされない場合にエラーメッセージに追加されると想定されるメッセージです。あなたはタイプmessageであるべきだと想像することができますが、あなたと一緒に簡単に書くことができます:StringAny
require(x == 4, x)
と等しくない場合、x(タイプの)の実際の値がエラーメッセージに追加されます。そのため、任意の値を許可するために選択されました。Int4Any
しかし、: =>一部はどうですか?これは名前による呼び出しと呼ばれ、基本的に次のことを意味します。アクセス時にこのパラメーターを評価します。次のスニペットを想像してみてください。
require(list.isEmpty, list.size)
この場合、が空であることを確認する必要があります。list空でない場合は、実際のlistサイズをエラーメッセージに追加します。ただし、通常の呼び出し規約では、メソッドを呼び出す前にlist.sizeパーツを評価する必要があります。これは無駄になる可能性があります。名前による呼び出しの規則では、は最初に使用されたとき、つまりエラーメッセージがコンストラクターである場合にのみ評価されます(必要な場合)。list.size