我正在使用重载方法记录Scala类.在scaladoc注释中引用它们时如何区分它们?例如,如果我有
/**
* The most important method is [[Doc.foo]].
*/
object Doc {
def foo[A]: A = throw new UnsupportedOperationException;
def foo[A,B >: A](x: A): B = x;
}
Run Code Online (Sandbox Code Playgroud)
sbt doc
我跑了
Doc.scala:1:警告:链接目标"Doc.foo"不明确.几个(可能是超载的)成员符合目标:
foo[A,B>:A](x:A):B
对象Doc中的方法[已选择]foo[A]:Nothing
对象Doc中的方法
使用foo[A,B >: A]
等链接不起作用.
在Ruby中,标准约定是在方法名称的末尾使用问号来指示该方法返回一个布尔结果:
[].empty? #=> true
Run Code Online (Sandbox Code Playgroud)
另一个标准约定是如果方法具有破坏性(即,它修改原始数据),则使用感叹号结束方法名称:
mylist.sort! # sort mylist in-place
Run Code Online (Sandbox Code Playgroud)
最近我看到了Scheme中使用的这些约定.这让我想知道,其他语言使用/支持这个约定?是否有其他特殊字符通常用于这些或其他语言的命名?
programming-languages naming-conventions special-characters method-names
可能重复:
计数与集合中的长度与大小
特别是在Java中Strings
,你打电话string.length()
,而在Lists
你打电话list.size()
.两个术语之间是否存在技术差异,因为String
它实际上只是一个列表chars
?
任何评论赞赏.
我有以下两种方法,我想知道它们是否合适:
public bool IsGetter(MethodInfo method)
{
return method.IsSpecialName
&& method.Name.StartsWith("get_", StringComparison.Ordinal);
}
public bool IsSetter(MethodInfo method)
{
return method.IsSpecialName
&& method.Name.StartsWith("set_", StringComparison.Ordinal);
}
Run Code Online (Sandbox Code Playgroud)
虽然这段代码有效,但我希望避免检查StartsWith并以编程方式获取命名约定的部分.基本上,是否有任何.NET 4.5类能够看到MethodInfo是属性getter/setter?
我很想添加一个像"Ex"这样的后缀来区分那些抛出Exceptions的方法(带有类似的签名).
有这样的约定吗?
是否可以在同一个类中获取另一个方法的名称但不使用手动编写的字符串?
class MyClass {
private void doThis()
{
// Wanted something like this
print(otherMethod.name.ToString());
}
private void otherMethod()
{
}
}
Run Code Online (Sandbox Code Playgroud)
你可能会问为什么:原因是我必须稍后像这个Invoke("otherMethod")一样调用该方法,但是我不想自己对这个字符串进行硬编码,因为我无法在项目中重构它.
与 DAO 方法的标准命名约定 和 DAO 类方法命名 问题相关。
为什么 DAO 类中的方法是这样的:
getUserById(int id)
getUserByUsernameAndPassword(String username, String password)
Run Code Online (Sandbox Code Playgroud)
代替:
getUser(int id)
getUser(String username, String password)
Run Code Online (Sandbox Code Playgroud)
在 IDE 中,当您开始键入 getUser 时,Eclipse 自动建议将开始向您显示两者。您可以根据参数选择要使用的方法。
当然,这是超载。为什么人们避免重载并为不同的参数使用不同的方法名称?还是他们在逃避?
问候。
我不知道这个语法是有效的.
+ (void) methodName:(TypeObject *)typeObject1:(TypeObject *)typeObject2;
Run Code Online (Sandbox Code Playgroud)
然后这样称为:
[object methodName:obj1:obj2];
Run Code Online (Sandbox Code Playgroud)
我发现它很丑陋和令人不安,但它构建了.
有人能指出我的参考资料,解释为什么这是有效的.
FWIW这个来自的代码库(继承),充斥着草率,懒惰的东西,几十个拼写错误,看起来像是由没有必要再次阅读它的人格式化.(再次谢谢你解开.)
这个例子只是为了表明这一点.
假设我使用矩阵库,但缺乏一些功能,让我们说矩阵中的每个元素加倍对我来说是至关重要的,我决定编写一个方法doubleIt
.但是,我可以写这个方法的2个版本
doubleItInPlace
doubleItByCreatingNewOne
这有点冗长,因此可以考虑命名约定,添加可变版本_!
后缀,或者在其前面添加单词"mut".
是否有任何确定的命名约定来实现这种差异?
我有一个案例,我将方法名称作为字符串传递给函数,但我不希望它硬编码.例如
void MyMethodName()
{
// some code
}
void SomeOtherMethod()
{
SomeExternalLibrary.ExternalClass.FunctionWithStringParameter("MyMethodName");
}
Run Code Online (Sandbox Code Playgroud)
我想要这样的东西:
FunctionWithStringParameter(MyMethodName.ToString());
Run Code Online (Sandbox Code Playgroud)
这样我可以通过"查找所有引用"来跟踪方法调用,并且我可以毫无后顾之忧地使用重构.
method-names ×10
c# ×3
java ×3
scala ×2
.net-4.5 ×1
coding-style ×1
dao ×1
invoke ×1
object ×1
objective-c ×1
overloading ×1
properties ×1
reflection ×1
scala-2.10 ×1
scaladoc ×1
terminology ×1