Swa*_*y g 75 ruby ruby-on-rails
我已经在Ruby编写了一段时间,但我不明白何时使用:
def self.METHOD_NAME
end
Run Code Online (Sandbox Code Playgroud)
要不就:
def METHOD_NAME
end
Run Code Online (Sandbox Code Playgroud)
在任何Rails模型中."self"是Java中的私有修饰符吗?什么时候应该使用它,何时不使用?万分感谢.
Dan*_*man 122
def self.method_name
end
Run Code Online (Sandbox Code Playgroud)
定义一个类方法.
def method_name
end
Run Code Online (Sandbox Code Playgroud)
定义实例方法.
这是一个非常好的帖子.
kru*_*.ar 36
快速解释这意味着什么:
在ruby中,您可以在特定对象上定义方法:
a = "hello"
def a.informal
"hi"
end
a.informal
=> "hi"
Run Code Online (Sandbox Code Playgroud)
当你这样做时会发生的是,对象a,它是类String,它的类被改为一个"幽灵"类,即元类,单例类或本征类.那个新的类超类是String.
另外,在类定义中,self设置为正在定义的类,所以
class Greeting
def self.say_hello
"Hello"
end
#is the same as:
def Greeting.informal
"hi"
end
end
Run Code Online (Sandbox Code Playgroud)
什么情况存在的对象Greeting,这是阶级的Class,获取新的方法新的元类,所以当你打电话
Greeting.informal
=> "hi"
Run Code Online (Sandbox Code Playgroud)
ruby中没有类方法,但语义相似.
bra*_*ntz 11
什么时候使用哪一个的好指南:
self.)方法.在创建类方法时,请仔细考虑它所属的类或模块.如果您发现自己在类中的类方法中复制代码,请将其分解为其他类可能混合的模块.
在这种情况下 - def self.method_name使它等同于Java静态方法:
红宝石:
class HexHelper
def self.to_h(num)
sprintf("%x", num)
end
end
use: HexHelper.to_h(12345)
Run Code Online (Sandbox Code Playgroud)
Java的:
public class HexHelper
{
public static String toHex(int num)
{
return new PrintfFormat("%x").sprintf(num);
}
}
use: HexHelper.toHex(12345)
Run Code Online (Sandbox Code Playgroud)