我有一个方法,它有一个布尔值作为参数。我知道最好避免使用布尔值。无论如何,在我的情况下,这是最有效的方式。
嗯,这是一个方法:
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
然后它不会起作用。为什么呢?
答案 0 :(得分:4)
可能
= f.select :fied1, MyModel.some_method true
被解释为:
= f.select(:fied1, MyModel.some_method) true
所以只需使用括号来避免歧义。
PS::true
是一个符号,所以如果你处理布尔值,就没有理由摆弄符号。
答案 1 :(得分: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解析器来说是不明确的,所以你得到一个错误。