我記得看過Dave Thomas的ruby屏幕截圖,講述如何使用元編程創建不需要遵守標識符語法要求的方法名稱。通常,標識符不能包含空格。他展示瞭如何用空格創建方法。但我不記得它是如何完成的。Ruby:處理任意方法名稱
我有一個類的任意字段名稱include
s Mongoid :: Document。這工作正常,_field可以是像'Hello World'這樣的字符串:
MyClass.class_eval <<-EOS
field :'#{ _field }', type: #{_type}
EOS
我想重寫setter。所以,我想這一點:
MyClass.class_eval <<-EOS
field :'#{ _field }', type: #{_type}
def #{ _field }=(val)
self['#{ _field }'] = [self.send('#{ _field }')[0], val]
end
EOS
不幸的是,如果_field像的「Hello World」的字符串,我會得到一個錯誤:
SyntaxError: (eval):2: formal argument cannot be a constant
def Hello World=(val)
我怎樣才能解決這個得到什麼?
僅僅因爲該屬性在MongoDB內部被稱爲「Hello World」並不意味着您必須(甚至不應該)在Ruby中使用該名稱。 ORM/ODM的一部分工作是處理數據庫與使用O [RD] M的代碼之間的阻抗不匹配,重命名數據庫屬性/字段以匹配Ruby屬性約定肯定會成爲其中的一部分。 –
你知道,Mongoid支持[動態字段](https://docs.mongodb.com/ruby-driver/master/tutorials/6.0.0/mongoid-documents/#dynamic-fields)開箱即用,aren你呢? – Stefan
@ muistooshort你是對的。我的決定是使用:as選項:Mongoid提供:field:'Hello World',輸入:Array,如::hello_world – Donato