我需要一些关于如何解决应用程序规范中的歧义的建议.举个简单的例子,
如果用户多次无法进行身份验证,请向IT发送通知.
在上面的例子中,不清楚"多次"是多少次.目前尚不清楚,我不能简单地设置1000次随机限制.
您将如何解决任何规格中不清楚的部分?(不只是我提到的那个)
此外,我应该在Google上搜索哪些主题或针对这类情况的书籍?软件工程?敏捷开发?我不知道从哪里开始.
任何有用的知识和技巧将不胜感激.
假设我希望有2个函数,一个函数在给定范围内生成一个随机整数,另一个函数在给定范围内生成一个随机双精度数。
int GetRandomNumber( int min, int max );
double GetRandomNumber( double min, double max );
Run Code Online (Sandbox Code Playgroud)
请注意,方法名称相同。我正在尝试决定是命名功能还是...
int GetRandomInteger( int min, int max );
double GetRandomDouble( double min, double max );
Run Code Online (Sandbox Code Playgroud)
第一种选择的好处是用户不必担心他们正在呼叫哪个。他们可以只使用整数或双精度值调用GetRandomNumber并获得结果。
The second option is more explicit in the names, but it reveals unneeded information to the caller.
I know this is petty, but I care about petty things.
Edit: How would C++ behave regarding implicit conversion.
Example:
GetRandomNumber( 1, 1 );
Run Code Online (Sandbox Code Playgroud)
This could be implicitly converted for the GetRandomNumber …
请参阅我对以下C#规范的一部分的剖析; 我想我必须遗漏一些东西,因为对我而言,我在这个问题中描述的行为实际上违反了规范.
好的,经过进一步的反思,并根据一些评论,我想我现在明白发生了什么.规范中的"源类型"一词指的是从中转换的类型- 即,Type2在我下面的例子中 - 这只是意味着编译器能够将候选缩小到两个定义的运算符(因为Type2它是源类型)对彼此而言).但是,它无法进一步缩小选择范围.所以规范中的关键词(适用于这个问题)是"源类型",我之前误解(我认为)是指"声明类型".
说我定义了这些类型:
class Type0
{
public string Value { get; private set; }
public Type0(string value)
{
Value = value;
}
}
class Type1 : Type0
{
public Type1(string value) : base(value) { }
public static implicit operator Type1(Type2 other)
{
return new Type1("Converted using Type1's operator.");
}
}
class Type2 : Type0
{
public Type2(string value) : base(value) { }
public …Run Code Online (Sandbox Code Playgroud) 我对C语言编程并不太熟悉(我只用语言做了一些小项目),然而,我的教授说了一些关于它的行为,这让我有些困惑.
他说的是这段代码有时根本不打印任何东西(我完全复制了板上的内容,我相信这是C的伪代码,因为"print"不在C中):
int a = ___________;
int b = ___________;
if (a < b)
print (“<“);
if (a > b)
print (“>”);
if (a==b)
print(“=”);
Run Code Online (Sandbox Code Playgroud)
基本上,你可以在那些没有满足这些条件的int变量中存储一些东西(_ __ _显然不是真正的代码,它只表示存在某些东西).它不一定需要一些填充那些空白的int数字......它可能是世界上的任何东西(并且可能存在在此代码之前发生的事情).
什么能填补这些空白,不会产生任何结果,为什么?
ps - 它与溢出,未定义的行为,超出范围的错误或类似的东西有关
pps - 我很难相信这位教授是错的.他比任何我接触过的人都更了解编程.我确信在某些情况下这是真的.
我在理解如何处理D中构造函数的模糊性方面遇到了一些麻烦.
struct mydta {
int a = 2;
int b = 3;
this(int c) {
a = c / 2;
b = c * 2;
}
this(float c) {
a = cast(int) c / 2;
b = cast(int) c * 2;
}
static mydta afvec = mydta(4.3);
static mydta aivec = mydta(5);
}
Run Code Online (Sandbox Code Playgroud)
afvec 数据值为2和8.aivec 具有数据值5和3.这意味着从语法中按预期afvec调用this(float c).
但是aivec做了类似的任务aivec.a = 5.
我在此推断,发现以下内容是合法的:分别aivec = mydta(5, 4);给出aivec值5和4.
任何想法如何绕过这个隐式初始化,以便我可以访问我的构造函数:this(int …
为什么我的编译器会将以下GetLength函数指针看作不明确的
伪代码:
size_t GetLength(char*);
size_t GetLength(wchar_t*);
struct ITEM { };
double GetLength(ITEM*);
CString GetInfo(ITEM * item, std::function<double (ITEM*)> fn)
{
... omitted for clarity
}
ITEM * item = new ITEM;
cout << GetInfo(item, GetLength); // <- ambiguous error
Run Code Online (Sandbox Code Playgroud)
GetInfo只允许双返回+ ITEM*参数模式.那么为什么考虑(而不是丢弃)GetLength的两个基于字符串的变体呢?
说我有:
@Given("first name is $firstName")
@Given("first name is $firstName and last name is $lastName")
Run Code Online (Sandbox Code Playgroud)
以下步骤将标记为含糊不清:
Given first name is John and last name is Smith
Run Code Online (Sandbox Code Playgroud)
如果不使用引号括起第一个参数,我该如何修复此步骤以使其仅匹配第二个参数?使用引号分别围绕这两个参数也具有相同的模糊性问题.
每个参数的长度是否有限制?是否有某些字符无法传入?
我在调用具有不同Action<T>变体的重载方法时遇到了一些意外的编译器行为.
假设我有这个类Test,我在CallTest构造函数中创建它的实例.
public class Test
{
public Test(Action<long> arg)
{
}
public Test(Action<decimal> arg)
{
}
}
public class CallTest
{
public CallTest()
{
Test t = new Test(TestDecimal);
}
public void TestDecimal(decimal arg)
{
}
public void TestLong(long arg)
{
}
}
Run Code Online (Sandbox Code Playgroud)
当Test使用TestDecimal或TestLong作为参数调用构造函数时,我收到以下错误:
以下方法或属性之间的调用不明确:'
Test(System.Action<long>)'和'Test(System.Action<decimal>)'
我的猜测是有一些隐式转换之间正在进行的long和decimal,但没有任何人有任何其他想法可能我做错?有没有解决方法?
我遇到某个任务的问题,这是一个练习,而不是一个真正的程序.任务是定义结构D的复制构造函数,其行为方式与compliler生成的复制构造函数完全相同.
class Ob{
};
struct A {
Ob a;
};
struct B : A {
Ob b;
};
struct C : A, B {
Ob c;
};
struct D : C, A {
Ob d;
};
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,结构A在D结构中间接导出几次导致复制构造函数定义模糊不清的原因如下:
D(const D& _d) : C(_d), A(_d), d(_d.d) {}
Run Code Online (Sandbox Code Playgroud)
我的问题是如何正确定义该复制构造函数?没有上面提到的定义的代码编译,所以它似乎应该是可能的.
MinGW 4.8.1错误消息:
zad3.cpp:12:8: warning: direct base 'A' inaccessible in 'C' due to ambiguity [enabled by default]
struct C : A, B {
^
zad3.cpp:16:8: warning: direct base 'A' inaccessible in 'D' due to ambiguity …Run Code Online (Sandbox Code Playgroud) c++ multiple-inheritance ambiguity copy-constructor ambiguous
我得到一个"引用make is ambiguous"编译错误,我不明白.
我有这两种方法
public static <T> T make(String name, Class<T> parentClass,
boolean rethrowRuntimeExceptions,
Object... params) throws DLException
public static <T> T make(String name, Class<T> parentClass,
Object... params) throws DLException
Run Code Online (Sandbox Code Playgroud)
这行代码被标记为含糊不清
String className = "clsNme";
String one = "1";
String two = "2";
SimpleFactory.make(className, Object.class, false, one, two);
Run Code Online (Sandbox Code Playgroud)
这是错误
both method <T#1>make(String,Class<T#1>,boolean,Object...) in SimpleFactory and method <T#2>make(String,Class<T#2>,Object...) in SimpleFactory match
[javac] where T#1,T#2 are type-variables:
[javac] T#1 extends Object declared in method <T#1>make(String,Class<T#1>,boolean,Object...)
[javac] T#2 extends Object declared in method …Run Code Online (Sandbox Code Playgroud)