gpt4 book ai didi

java - Ruby setter 方法语法 method=(value) - 与 Java 的比较

转载 作者:太空宇宙 更新时间:2023-11-03 17:33:53 25 4
gpt4 key购买 nike

你好亲爱的 stackoverflowers :)

我来自 Java,对 getter 的语法有一个疑问(如果它真的只是一个语法问题)。

在 java 中你会有一个类似

的 setter
private void setName(value) {
variableName = value;
}

谁会将值作为参数并更改其中的实例变量。

在 ruby​​ 中,当我显式定义一个 setter 时(由于约束原因),我需要使用 set_name=(value) 或者如果我使用语法 set_name(value) 会是一样的吗?换句话说,方法名称末尾的 = 可以执行任何其他操作,或者它只是语法(如 ! 和 ?)。

像这样:

def set_name=(value)
@name = value
end

或者这个:

def set_name(value)
@name = value
end

预先感谢您的关注。

亚历克斯

最佳答案

方法名称中的尾随 = 将该方法标识为 setter/mutator 方法。当你在 Ruby 中这样说时:

o.p = v

你真的在说:

o.send(:p=, v)

so o.p = v 只是在 o 中调用 p= 方法的一种奇特方式。这就是为什么这样的事情:

's'.pancakes = 11

给你一个 NoMethodError 异常,提示 's' 没有 pancakes= 方法:字符串没有(不幸的是) pancakes= 方法。

在你的情况下,你根本不会使用 set_name,你会有一个 name= 方法:

def name=(value)
@name = value
end

可能还有一个 name 方法作为 accessor/getter:

def name
@name
end

关于java - Ruby setter 方法语法 method=(value) - 与 Java 的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24004582/

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