作为方法调用的Ruby类

作为方法调用的Ruby类,ruby,Ruby,有没有一种方法可以定义一个类,这样您就可以调用该类作为执行所需代码的方法?例如(不起作用): 在控制台中: MySpecialClass(4) => 16 MySpecialClass(5) => 25 我似乎在网上找不到任何东西,但是一些Ruby(2.1.2)类似乎具有类似的行为,例如String: String("hello") => "hello" String(3) => "3" 请注意,这与String#new类方法的行为不同: String.new(3)

有没有一种方法可以定义一个类,这样您就可以调用该类作为执行所需代码的方法?例如(不起作用):

在控制台中:

MySpecialClass(4)
=> 16
MySpecialClass(5)
=> 25
我似乎在网上找不到任何东西,但是一些Ruby(2.1.2)类似乎具有类似的行为,例如
String

String("hello")
=> "hello"
String(3)
=> "3"
请注意,这与
String#new
类方法的行为不同:

String.new(3) TypeError: no implicit conversion of Fixnum into String 新字符串(3) TypeError:没有将Fixnum隐式转换为字符串
您只需定义一个与类同名的方法:

def MySpecialClass(x)
  x * x
end

String(foo)
实际上正在调用该方法

你的方法与课堂无关。例如,在定义了类和方法之后,您可以将该类放弃到垃圾收集,并且该方法将继续存在:
MySpecialClass(4)=>16;我的专业课是a吗?Class=>true;别名m MySpecialClass;MySpecialClass=nil;别名MySpecialClass m;MySpecialClass(4)=>16;我的专业课是a吗?Class=>false
。您当然不希望出现这种行为。我知道,在将
MySpecialClass
设置为
nil
之前,我不需要对该方法进行别名,该方法仍然存在。
def MySpecialClass(x)
  x * x
end