假设我有一个旨在实例化的类.我在类中有几个私有的"帮助器"方法,它们不需要访问任何类成员,并且只对它们的参数进行操作,返回结果.
public class Example {
private Something member;
public double compute() {
double total = 0;
total += computeOne(member);
total += computeMore(member);
return total;
}
private double computeOne(Something arg) { ... }
private double computeMore(Something arg) {... }
}
Run Code Online (Sandbox Code Playgroud)
有没有特别的理由指定computeOne和computeMore作为静态方法 - 或任何特殊原因不?
将它们保持为非静态是最容易的,即使它们肯定是静态的而不会引起任何问题.
我知道python有一个len()用于确定字符串大小的函数,但我想知道为什么它不是字符串对象的方法.
好吧,我意识到我很尴尬.__len__()实际上是一个字符串对象的方法.使用字符串对象上的len函数在Python中看到面向对象的代码似乎很奇怪.此外,__len__将名称视为名称而不仅仅是len 也是奇怪的.
在Python中定义类的方法时,它看起来像这样:
class MyClass(object):
def __init__(self, x, y):
self.x = x
self.y = y
Run Code Online (Sandbox Code Playgroud)
但是在其他一些语言中,例如C#,您可以使用"this"关键字引用该方法绑定的对象,而不将其声明为方法原型中的参数.
这是一个有意的语言设计决策在Python或是否有一些实现细节需要传递"自我"作为参数?
我试图通过参数反射调用方法,我得到:
对象与目标类型不匹配
如果我调用没有参数的方法,它可以正常工作.如果我调用该方法Test("TestNoParameters"),则基于以下代码,它可以正常工作.但是,如果我打电话Test("Run"),我会得到一个例外.我的代码有问题吗?
我最初的目的是传递一系列对象,例如public void Run(object[] options)但这不起作用,我尝试了一些更简单的例如字符串而没有成功.
// Assembly1.dll
namespace TestAssembly
{
public class Main
{
public void Run(string parameters)
{
// Do something...
}
public void TestNoParameters()
{
// Do something...
}
}
}
// Executing Assembly.exe
public class TestReflection
{
public void Test(string methodName)
{
Assembly assembly = Assembly.LoadFile("...Assembly1.dll");
Type type = assembly.GetType("TestAssembly.Main");
if (type != null)
{
MethodInfo methodInfo = type.GetMethod(methodName);
if (methodInfo != null)
{
object result = null;
ParameterInfo[] …Run Code Online (Sandbox Code Playgroud) 在Java中,final在接口方法中定义参数并且不遵循实现类中的参数是完全合法的,例如:
public interface Foo {
public void foo(int bar, final int baz);
}
public class FooImpl implements Foo {
@Override
public void foo(final int bar, int baz) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,bar并且在类VS的接口中baz有相反的final定义.
以同样的方式,final当一个类方法扩展另一个类时,不会强制执行任何限制abstract.
虽然final在类方法体内有一些实用价值,但是有没有指定final接口方法参数的点?
有人可以为我解释这个方法声明语法吗?在此函数中,返回UIPickerView(iPhone上的老虎机UI)的行数.根据我的理解,Method被称为' pickerView',并返回一个NSInteger.
它传入一个指向UIPickerview的指针,称为' pickerView'...首先,为什么该方法与参数名称相同?
接下来有一个名为component的NSInteger参数,它告诉我们计算行的哪个组件.决定哪个是在方法体内的逻辑.
什么是' numberOfRowsInComponent?它似乎描述了我们返回的值,但它位于参数的中间.
- (NSInteger) pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component
{
if (component == kStateComponent)
return [self.states count];
return[self.zips count];
}
Run Code Online (Sandbox Code Playgroud) 我已经阅读了几篇关于Objective-C方法语法的文章,但我想我不了解一个方法的多个名称.
我正在尝试创建一个名为getBusStopswith NSString和NSTimeIntervalparameters以及返回类型的方法NSMutableArray.这是我构建方法的方法,但它在运行时显然会出错:
- (NSMutableArray *)getBusStops:(NSString *)busStop
(NSTimeInterval *)timeInterval;
Run Code Online (Sandbox Code Playgroud)
我看到了一个方法的另一个例子:
-(NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这个方法有每个参数的方法名称.我应该做同样的事情:
- (NSMutableArray *)getBusStops:(NSString *)busStop
forTime:(NSTimeInterval *)timeInterval
Run Code Online (Sandbox Code Playgroud) 将static关键字添加到方法时意味着什么?
public static void doSomething(){
//Well, do something!
}
Run Code Online (Sandbox Code Playgroud)
你能把static关键字添加到课堂吗?那意味着什么?
我有一个声明了许多实例方法的模块
module UsefulThings
def get_file; ...
def delete_file; ...
def format_text(x); ...
end
Run Code Online (Sandbox Code Playgroud)
我想从一个类中调用其中的一些方法.你通常如何在ruby中这样做是这样的:
class UsefulWorker
include UsefulThings
def do_work
format_text("abc")
...
end
end
Run Code Online (Sandbox Code Playgroud)
include UsefulThings从中引入所有方法UsefulThings.在这种情况下,我只想要format_text并明确地不想get_file和delete_file.
我可以看到几个可能的解决方案:
Usefulthings并且只引入一些方法
UsefulThings在其中,然后委托format_text给该代理实例
为什么单个模块中有很多不相关的功能?它ApplicationHelper来自一个rails应用程序,我们的团队事实上决定将其作为任何其他地方不具备的特定任何东西的倾倒场.大多数独立的实用程序方法随处可见.我可以将它分解成单独的助手,但是它们中有30个,每个都有1个方法......这似乎没有效果
在过去的几周我已经看到了一些人使用很长的名字一个方法或类(50个字符),这通常是它提高了可读性的前提下,我的看法是,一个长的名字一样,这是一个指标,我们是如果我们需要这么长的名字,试图在方法类中做很多或者太多,但是我想知道你们对它的看法.
一个例子是:
getNumberOfSkinCareEligibleItemsWithinTransaction
Run Code Online (Sandbox Code Playgroud)