为什么Ruby设置者需要“Self”班里的资格?Ruby setter-是否由(c)attr_accessor或者手动-似乎是唯一需要的方法self.在类本身内访问时的限定条件。这似乎使Ruby单独进入了语言世界:所有方法都需要self/this(比如Perl,我认为Javascript)不需要任何方法self/thisIS(C#,Java)只有策划者才需要self/this(红宝石?)最好的比较是C#与Ruby,因为两种语言都支持语法上像类实例变量一样工作的访问器方法:foo.x = y, y = foo.x..C#称它们为属性。下面是一个简单的例子;Ruby中的同一个程序,然后是C#:class A def qwerty; @q; end # manual getter
def qwerty=(value); @q = value; end # manual setter, but attr_accessor is same
def asdf; self.qwerty = 4; end # "self." is necessary in ruby?
def xxx; asdf; end # we can invoke nonsetters w/o "self."
def dump; puts "qwerty = #{qwerty}"; endenda = A.new
a.xxx
a.dump拿走self.qwerty =()并且失败了(Linux&OSX上的Ruby1.8.6)。现在C#:using System;public class A {
public A() {}
int q;
public int qwerty {
get { return q; }
set { q = value; }
}
public void asdf() { qwerty = 4; } // C# setters work w/o "this."
public void xxx() { asdf(); } // are just like other methods
public void dump() { Console.WriteLine("qwerty = {0}", qwerty); }}public class Test {
public static void Main() {
A a = new A();
a.xxx();
a.dump();
}}问:这是真的吗?除了策划人以外,还有其他需要自我的场合吗?也就是说,在其他情况下,Ruby方法不可能被调用无赛尔夫?当然,在很多情况下,赛尔夫成是必要的。这并不是Ruby独有的,只是要明确一点:using System;public class A {
public A() {}
public int test { get { return 4; }}
public int useVariable() {
int test = 5;
return test;
}
public int useMethod() {
int test = 5;
return this.test;
}}public class Test {
public static void Main() {
A a = new A();
Console.WriteLine("{0}", a.useVariable()); // prints 5
Console.WriteLine("{0}", a.useMethod()); // prints 4
}}同样的歧义是以同样的方式解决的。但我想问的是这个案子一种方法有被定义,和不已经定义了局部变量,并且我们遇到qwerty = 4这是一个方法调用还是一个新的局部变量赋值?
3 回答
慕斯王
TA贡献1864条经验 获得超2个赞
qwerty = 4
qwerty
self.
self.
:
class A def test 4 end def use_variable test = 5 test end def use_method test = 5 self.test endenda = A.new a.use_variable # returns 5a.use_method # returns 4
test
self.
this.
- 3 回答
- 0 关注
- 501 浏览
添加回答
举报
0/150
提交
取消