什麼時候在方法中使用方法是一個好習慣?Ruby - 爲什麼方法中的方法不好?
這裏是方法的方法不好用例如:
class SomeClass
def self.fooify(a, b, c)
def self.bar?(a)
(a % 3) == 0
end
return a if self.bar?(a)
return b + c
end
end
加分 - 你將如何存根吧?
什麼時候在方法中使用方法是一個好習慣?Ruby - 爲什麼方法中的方法不好?
這裏是方法的方法不好用例如:
class SomeClass
def self.fooify(a, b, c)
def self.bar?(a)
(a % 3) == 0
end
return a if self.bar?(a)
return b + c
end
end
加分 - 你將如何存根吧?
您可以使用方法定義方法中,這樣定義的內部方法時,父類的方法被稱爲:
class A
def self.define_foo
def foo
:foo
end
end
end
a = A.new
a.foo #=> undefined method foo
A.define_foo
a.foo #=> :foo
然而,這是相當罕見的,因爲方法定義的方式有傳遞給到PARAMS進不去家長。有用得多是使用define_method
攜帶結合方法已被創建在:
class A
def self.define_sth(sth)
define_method sth do
sth
end
end
end
a = A.new
a.bar #=> undefined method bar
A.define_sth(:bar)
a.bar #=> :bar
定義的關聯時,這是被用於例如通過導軌。當您撥打Parent.has_one :child
時,方法has_one
調用define_method
來創建child
,child=
,build_child
和create_child
方法。
至於存根,創建這種方法的方法與其他方法沒有什麼不同,您只需照常存根即可。
你有看看http://stackoverflow.com/questions/4864191/is-it-possible-to-have-methods-inside-methods – Bala
啊哈,沒有看到。謝謝 – xxjjnn
在我看來,lambda和proc被創建爲可丟棄的一段代碼。 (a)'(或'bar.call()'),並且在if:'return a if bar。(a)'(或'bar.call()')。或者你可以這樣做:'返回一個if - >(a){(a%3)== 0}。(a)'。考慮到'self.fooify'中的'a,b,c'是本地的,你不必爲lambda指定參數,所以它可能是這樣的:'return a if - > {(a%3 )== 0)}。()'ps。這是用於存根條的答案,但我不確定我是否正確理解它。 –