是否有一种方法可以判断对象是否可变,类似于mutable?
以下内容?如果没有,实现它的最佳方法是什么?
"abcde".mutable? # => true
0.mutable? # => false
回答 mu 太短和 dbenhur 的问题,我不喜欢enumerated.inject(initial){...}
or的语法enumerated.each_with_object(initial){...}
。我想要一个反转接收器和参数的方法,并且我希望它可用于各种各样的类;所以我有:
initial.my_new_method(enumerated){...}
0.my_new_method(1..10){|sum, i| sum + i} # => 55
"a".my_new_method(b: 3, c: 4){|s, (k, v)| s + k.to_s * v} # => "abbbcccc"
这将使返回成为接收器的修改版本,并且在概念上更自然。并且my_new_method
,我希望它是非破坏性的。当接收器可变时,我还想定义一个破坏性版本
initial.my_new_method!(enumerated){...}
"a".my_new_method!(b: 3, c: 4){|s, (k, v)| s << k.to_s * v} # => "abbbcccc"
所以检测receiver是否可变是很有必要的。如果它被冷冻也没关系。如果我对冻结的对象使用该方法的破坏性版本,它只会引发错误。没有错。