我想知道什么时候应该投出更好.在添加,乘法等时,C++中的隐式类型转换规则是什么.例如,
int + float = ?
int * float = ?
float * int = ?
int / float = ?
float / int = ?
int / int = ?
int ^ float = ?
Run Code Online (Sandbox Code Playgroud)
等等...
表达式是否总是被评估为更精确的类型?Java的规则有所不同吗?如果我不准确地说出这个问题,请纠正我.
是否可以在c#中定义枚举的隐式转换?
可以实现这一目标的东西?
public enum MyEnum
{
one = 1, two = 2
}
MyEnum number = MyEnum.one;
long i = number;
Run Code Online (Sandbox Code Playgroud)
如果没有,为什么不呢?
为了进一步讨论和提出这个想法,我跟进了我目前处理这个问题的方法:改进C#enum
到目前为止,Scala中的隐式参数对我来说并不好看 - 它太接近于全局变量,但是由于Scala看起来像是相当严格的语言,我开始怀疑自己的看法:-).
问题:当隐式参数真正起作用时,你能展示一个真实(或接近)的好例子吗?IOW:比这更严重的东西showPrompt
,这将证明这种语言设计的合理性.
或者相反 - 你能否展示出可靠的语言设计(可能是想象的),这种设计会使隐含的不必要.我认为即使没有机制比implicits更好,因为代码更清晰,没有猜测.
请注意,我问的是参数,而不是隐式函数(转换)!
谢谢你们所有的好答案.也许我澄清了我的"全局变量"异议.考虑这样的功能:
max(x : Int,y : Int) : Int
Run Code Online (Sandbox Code Playgroud)
你叫它
max(5,6);
Run Code Online (Sandbox Code Playgroud)
你可以(!)这样做:
max(x:5,y:6);
Run Code Online (Sandbox Code Playgroud)
但在我眼中的implicits
作用是这样的:
x = 5;
y = 6;
max()
Run Code Online (Sandbox Code Playgroud)
它与这样的构造(类似PHP)没有太大的不同
max() : Int
{
global x : Int;
global y : Int;
...
}
Run Code Online (Sandbox Code Playgroud)
这是一个很好的例子,但如果你能想到不使用发送消息的灵活使用implicit
请发一个反例.我对语言设计的纯度非常好奇;-).
据我所知,在这篇博文 中,Scala中的"类型类"只是一个用特征和隐式适配器实现的"模式".
正如博客所说,如果我有特征A
和适配器,B -> A
那么我可以调用一个函数,它需要类型A
的参数,参数类型B
而不显式调用此适配器.
我发现它很好但不是特别有用.您能给出一个用例/示例,它显示了此功能的用途吗?
我正在尝试编写一个文本游戏,我在我定义的函数中遇到了一个错误,让你在制作角色后基本上可以花费你的技能点数.起初,错误表明我试图从代码的这一部分中的整数中减去一个字符串:balance - strength
.显然这是错的,所以我用strength = int(strength)
... 修复它但是现在我得到了这个我以前从未见过的错误(新程序员)而且我很难说它到底想要告诉我什么以及我如何修复它.
这是我的函数部分无法正常工作的代码:
def attributeSelection():
balance = 25
print("Your SP balance is currently 25.")
strength = input("How much SP do you want to put into strength?")
strength = int(strength)
balanceAfterStrength = balance - strength
if balanceAfterStrength == 0:
print("Your SP balance is now 0.")
attributeConfirmation()
elif strength < 0:
print("That is an invalid input. Restarting attribute selection. Keep an eye on your balance this time!")
attributeSelection()
elif strength > balance:
print("That is …
Run Code Online (Sandbox Code Playgroud) 我是C#的新手并且学习新单词.在编程c#时,我发现很难理解这两个词的含义是什么.我在字典中查找了含义,这是我得到的:
含蓄
"隐含的东西是间接表达的."
"如果一个品质或元素隐含在某个东西中,它就会参与其中或由它展示;"
明确的
"明确表达或展示的东西清楚公开,没有任何隐藏任何东西的企图"
"如果你明确表达某些事情,那么你就会公开而清楚地谈论它."
我想在C#中理解它.
谢谢你的帮助.
干杯
附加信息:
这是我正在阅读的书中的一部分句子,其中有"隐含"这个词
"这意味着里面的区域和占用者
AreaPerPerson( )
隐含地引用在调用的对象中找到的那些变量的副本AreaPerPerson( )
"
我完全不明白这句话试图说什么.
在我的应用程序中,我需要阅读Qr代码.我在网上搜索并找到了Zing代码但是很多开发人员使用它时遇到了问题,而且它似乎有问题!
如果我假设我的客户在他们的设备上安装了qr阅读器,我如何使用这些应用程序并通过隐式意图调用它们?
如果用户没有任何qr阅读器,应用程序会发生什么?如果它崩溃,我可以要求用户下载例如QrDroid,然后使用它吗?
我有ReSharper 4.5并且到目前为止发现它非常宝贵,但我有一个顾虑;
它似乎想要隐含每个变量声明(var).
作为一个相对较新的开发人员,在这方面我应该相信ReSharper多少钱?
从Paints Tab Headers的方法中获取以下代码片段.
TabPage currentTab = tabCaseNotes.TabPages[e.Index];
Rectangle itemRect = tabCaseNotes.GetTabRect(e.Index);
SolidBrush fillBrush = new SolidBrush(Color.Linen);
SolidBrush textBrush = new SolidBrush(Color.Black);
StringFormat sf = new StringFormat
{
Alignment = StringAlignment.Center,
LineAlignment = StringAlignment.Center
};
Run Code Online (Sandbox Code Playgroud)
Resharper希望我将所有5个改为var.我已经阅读了以下类似帖子,在C#中使用var关键字,但我想从ReSharper的角度来看.
给定一个类型类,其中应根据返回类型执行实例选择:
case class Monoid[A](m0: A) // We only care about the zero here
implicit def s[T] : Monoid[Set[T]] = Monoid(Set.empty[T])
implicit def l[T] : Monoid[List[T]] = Monoid(List.empty[T])
def mzero[A](implicit m: Monoid[A]) : A = m.m0
Run Code Online (Sandbox Code Playgroud)
为什么Scala(2.11.6)无法解析正确的实例:
scala> mzero : List[Int]
<console>:24: error: ambiguous implicit values:
both method s of type [T]=> Monoid[Set[T]]
and method l of type [T]=> Monoid[List[T]]
match expected type Monoid[A]
mzero : List[Int]
^
Run Code Online (Sandbox Code Playgroud)
当它有没有问题,使用时发现基于返回类型的隐式隐函数(我们在这里重新定义它为我来说明它是多么相似mzero)
def i[A](implicit a : A) : …
Run Code Online (Sandbox Code Playgroud) 我正在设计一个类层次结构,它由一个基类和几个特征组成.基类提供了几种方法的默认实现,并且traits选择性地覆盖某些方法abstract override
,以便充当可堆叠的traits/mixins.
从设计的角度来看,这很有效,并映射到域,以便我可以从这里添加过滤函数(一个特征),带有来自此处的谓词(另一个特征)等.
但是,现在我想要一些我的特征来采用隐式参数.我很高兴从设计的角度来看这仍然有意义,并且在实践中不会让人感到困惑.但是,我不能说服编译器运行它.
问题的核心似乎是我无法为特征提供构造函数参数,因此可以将它们标记为隐式.在方法实现中引用隐式参数无法使用预期的"无法找到隐式值"消息进行编译; 我试图通过构建阶段(在实践中,它总是在范围内)"隐藏"隐含的方法,以便在方法中可用
implicit val e = implicitly[ClassName]
Run Code Online (Sandbox Code Playgroud)
但是(毫无疑问,你们很多人都希望)这个定义失败了同样的信息.
似乎这里的问题是我无法说服编译器用implicit ClassName
标志标记特征本身的签名,并强制调用者(即将特征混合到一个对象中的那些)来提供隐式.目前我的调用者正在这样做,但编译器没有在此级别进行检查.
是否有任何方法可以将特征标记为在施工时需要某些隐含物?
(如果不是,这还没有实现,还是有更深层次的原因,为什么这是不切实际的?)