1

パラメータとしてブール値を持つメソッドがあります。ブール値を避ける方がよいことは承知しています。とにかく私の場合、それが最も効率的な方法です。

さて、ここに方法があります:

  def some_method(include_some_values = false)
          #do some workcountries = []
          if include_some_values 
             #do some additional work  
           end
           #return value
    end

呼び出し(haml)

= form_for @address do |f|
  = f.select :fied1, MyModel.some_method(true) #it's okay

しかし、私がそれを次のように呼ぶと

= f.select :fied1, MyModel.some_method true 

また

= f.select :fied1, MyModel.some_method :true 

また

= f.select :fied1, MyModel.some_method false 

また

= f.select :fied1, MyModel.some_method :false 

その後、それは機能しません。なんで?

4

2 に答える 2

4

おそらく

= f.select :fied1, MyModel.some_method true

次のように解釈されます:

= f.select(:fied1, MyModel.some_method) true

したがって、あいまいさを避けるために括弧を使用してください。

PS::trueはシンボルなので、ブール値を扱う場合はシンボルをいじる理由はありません。

于 2012-08-24T13:28:59.737 に答える
4

問題に括弧を使用しない場合の問題が含まれる場合、それはブール値とは関係がなく、Rubyパーサーと関係があります。

メソッドをパラメーターとして別のメソッドに渡すには、場合によっては括弧が必要です。

def a_method(value)
   puts value
end

def one_argument(value)
   puts value
end

def two_arguments(value1, value2)
   puts value1 + value2
end

# These snippets work fine
one_argument a_method 15
one_argument a_method(15)
two_arguments 999, a_method(15)
# ... etc ...

# This one doesn't
two_arguments 999, a_method 15

この最後の例(質問で行っていることと似ています)は、Rubyパーサーにとってあいまいであるため、エラーが発生します。

于 2012-08-24T13:31:25.493 に答える