Dan*_*nor 32 ruby attributes conventions boolean-expression
学习红宝石.我的印象是布尔属性应该如下命名:
my_boolean_attribute?
Run Code Online (Sandbox Code Playgroud)
但是,尝试执行以下操作时出现语法错误:
class MyClass
attr_accessor :my_boolean_attribute?
def initialize
:my_boolean_attribute? = false
end
end
Run Code Online (Sandbox Code Playgroud)
红宝石显然很讨厌"?".这是惯例吗?我究竟做错了什么?
Nic*_*zny 42
编辑:三年后; 时代,他们是a-changin'......
Julik的答案是解决这个问题的最简单,最好的方法:
class Foo
attr_accessor :dead
alias_method :dead?, :dead # will pick up the reader method
end
Run Code Online (Sandbox Code Playgroud)
对于后人,我对原始问题的回答如下:
简短版本:
您不能在实例变量的名称中使用问号.
版本较长:
举个例子,attr_accessor :foo
就是这个只是 从概念上讲,以下是一些语法糖:
def foo
@foo
end
def foo=(newfoo)
@foo = newfoo
end
Run Code Online (Sandbox Code Playgroud)
此外,问号后缀大多只是一个约定,表示方法的返回值是布尔值.
我能在这里得到的最佳近似值...
class MyClass
def initialize
@awesome = true
end
def awesome?
@awesome
end
end
Run Code Online (Sandbox Code Playgroud)
在这种情况下,可能存在使用的情况attr_accessor
- 毕竟,您可能明确表示您正在使用布尔属性.通常,我在实现一个方法时保存问号后缀,该方法的布尔返回值基于稍微复杂的条件而不仅仅是属性的值.
干杯!
两年后编辑,在最近的评论之后:
:my_boolean_attribute?
两者的调用都将失败NameError
.:"my_attribute?"
SyntaxError
.Jul*_*lik 40
快速添加"问题方法"的最简单方法是为读者方法使用别名
class Foo
attr_accessor :dead
alias_method :dead?, :dead # will pick up the reader method
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
22275 次 |
最近记录: |