来自http://golang.org/src/pkg/database/sql/driver/types.go :
type ValueConverter interface {
// ConvertValue converts a value to a driver Value.
ConvertValue(v interface{}) (Value, error)
}
var Bool boolType
type boolType struct{}
var _ ValueConverter = boolType{} // line 58
func (boolType) String() string { return "Bool" }
func (boolType) ConvertValue(src interface{}) (Value, error) {....}
Run Code Online (Sandbox Code Playgroud)
我知道ValueConverter是一个接口名称.第58行似乎声明boolType实现接口ValueConverter,但这是必要的吗?我删除了第58行,代码运行良好.
我尝试命名一个lambda参数_,例如(一个减少版本):
Consumer<Object> c = _ -> {};
Run Code Online (Sandbox Code Playgroud)
因为我想表示一个参数被忽略,但我得到了以下编译器错误:
对于lambda参数禁止使用'_'作为标识符
这对我来说是一个惊喜.有趣的是,两个下划线是可以的:
Consumer<Object> c = __ -> {}; // no compile error
Run Code Online (Sandbox Code Playgroud)
因此,它不是一般的下划线字符,而是单个字符.
为什么单下划线名称是专门禁止的?
在Python中,存在单个前导下划线,双前导下划线,双前导+双尾下划线和单尾随下划线的约定.其中许多内容在对象名称之前的单个和双下划线的含义中是什么?.
但单一领先+单尾跟下划线的意义或惯例是什么?我第一次看到他们在enum模块中的使用:
8.13.15.3.2.支持的
_sunder_名称
_name_- 会员姓名_value_- 会员价值; 可以在新的设置/修改_missing_- 未找到值时使用的查找函数; 可能会被覆盖_ignore_- 作为list()或str()的名称列表,不会转换为成员,并将从最终类中删除_order_- 在Python 2/3代码中使用以确保成员顺序一致(类属性,在类创建期间删除)_generate_next_value_- 由Functional API和auto用于获取枚举成员的适当值; 可能会被覆盖
我还没有见过这样的单龙头单结尾下划线破甲之前的名字.它们是以任何特殊方式处理,还是具有与任何其他与下划线相关的命名约定不同的隐含含义?它们与没有下划线有何不同?
我试图查找信息意味着什么,但我没有。试图了解它在这段代码中的作用:
checkBox.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
// The toggle is enabled
} else {
// The toggle is disabled
}
}
Run Code Online (Sandbox Code Playgroud)