"HELLO" 但是我该如何编写自己的方法呢? 类似的东西(虽然这显然不起作用): class MyClass -6ren">
gpt4 book ai didi

ruby - 用自己的方法替换对象的通用方法

转载 作者:数据小太阳 更新时间:2023-10-29 07:10:11 26 4
gpt4 key购买 nike

使用字符串可以做到这一点:

a = "hello"
a.upcase!
p a #=> "HELLO"

但是我该如何编写自己的方法呢?

类似的东西(虽然这显然不起作用):

class MyClass
def positify!
self = [0, self].max
end
end

我知道有一些技巧可以用在 String 上,但是如果我想对 Object 做这样的事情呢?

最佳答案

许多类是不可变的(例如 NumericSymbol ...),因此没有方法允许您更改它们的值。

另一方面,任何 Object 都可以有实例变量,并且这些变量可以被修改。

有一种简单的方法可以将行为委托(delegate)给一个已知对象(例如 42),并且稍后可以使用 SimpleDelegator 更改为另一个对象。 .在下面的示例中,quacks_like_an_int 的行为类似于 Integer:

require 'delegate'
quacks_like_an_int = SimpleDelegator.new(42)
quacks_like_an_int.round(-1) # => 40
quacks_like_an_int.__setobj__(666)
quacks_like_an_int.round(-1) # => 670

你也可以用它来设计一个类,例如:

require 'delegate'
class MutableInteger < SimpleDelegator
def plus_plus!
__setobj__(self + 1)
self
end

def positify!
__setobj__(0) if self < 0
self
end
end

i = MutableInteger.new(-42)
i.plus_plus! # => -41
i.positify! # => 0

关于ruby - 用自己的方法替换对象的通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9130994/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com