这不是Rails特有的 - 我只是以Rails为例.
我在Rails中有一个模型:
class Item < ActiveRecord::Base
def hello
puts "Hello, #{self.name}"
end
end
Run Code Online (Sandbox Code Playgroud)
(假设Item模型(类)有一个叫做的方法name).我什么时候需要使用self.name,何时可以使用name?(例如#{name})
Phr*_*ogz 61
在调用方法时更喜欢省略它是惯用的self.; 通常从不需要它.
您必须self.foo = xxx在调用setter方法时使用,而不是foo = xxx,以便Ruby意识到您没有尝试创建新的局部变量.
do_something与方法同名的现有局部变量,则必须使用它self.do_something来调用该方法,因为do_something最终将读取该变量.你不能使用self.foo(...)调用私有方法; 你必须改为打电话foo(...).
tok*_*and 10
如果省略selfRuby,将首先查找具有该名称的局部变量,然后查找实例方法.这不是写作的惯用语self..无论如何,你必须写下作业self.something = value.
请注意,self在调用私有方法时不能使用(受保护方法没有问题):
class A
def foo; self.bar; end
private
def bar; "bar"; end
end
A.new.foo
# private method `bar' called for #<A:0x7f49193584f0> (NoMethodError)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4836 次 |
| 最近记录: |