2012-11-28 82 views
0

我該如何做出這樣的事情?Ruby:使用未定義的變量

1.9.3p286 :006 > defined? activated_flag 
=> nil 
1.9.3p286 :007 > puts (activated_flat ? "activated!" : "no activated") 

我想看到這裏no activated,而是我有:

NameError: undefined local variable or method `activated_flat' for main:Object 
    from (irb):7 
    from /Users/fguillen/.rvm/rubies/ruby-1.9.3-p286/bin/irb:16:in `<main>' 

回答

2

爲什麼不使用defined?

puts (defined?(activated_flat) ? "activated!" : "no activated") 
#=> no activated 
0

我發現最簡單的方法是添加一個回退初始化 like:

activated_flag ||= false 

但是,因爲我在erb partials中使用這個變量,所以回退初始化看起來很醜。

+0

爲什麼不讓部分的調用者通過一切?部分是一種方法和方法定義了接口,如果有人調用方法而不提供接口要求的所有參數,則調用者將得到他們應得的錯誤。 –

+0

完全@ muistooshort,我缺少的是[參數默認值功能](http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Method_Calls#Default_Values),但對於部分定義,這將是非常在這種情況下有幫助。 – fguillen

+1

不幸的是,Rails喜歡假裝partials不是函數,所以你必須這樣做[愚蠢醜陋的方式](http://api.rubyonrails.org/classes/ActionView/Base.html#label-Passing+local+變量+到+子+模板)。還有一個類似的問題(甚至可能是重複的):http://stackoverflow.com/q/2060561/479863。恥辱,部分(和一般ERB模板)不是明確的功能(嗯,我在我年老的時候恢復到Lisp?哈!)。 –