- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要一个函数,它可以接受除某些特定类型之外的任何内容。粗略地说就像
function f(y::X) where y<:setdiff(Any,Real)
return y
end
是否存在“不是子类型”运算符,其作用与<:
相反?还有其他方法可以实现这一目标吗?
编辑:这是错误的,没有必要理解问题或答案,因此删除线:
原因是我想要函数
f
的特定方法。对于任何真实的和对于任何任意对象的一般的。问题是,如果我只是将此函数签名保留为
where y
那么它将把通用函数专门化为 Float64 类型,它比我为任何实数编写的函数(
where y<:Real
)更具体。
最佳答案
确实有一个“不是子类型”运算符(它是 >:
),但您不需要该运算符来解决您的问题。
如果您只想要一个适用于所有类型的通用方法,以及一个特定于 Real 子类型的方法,那么您应该这样做:
f(x::Any) = 1
f(x::Real) = 2
第一种方法与仅添加任何类型签名(即 f(x) = 1
)相同,并且该函数将作为所有参数类型的后备。然而,自从 Real
比 Any
更具体,如果输入是Real
,则将使用第二种方法而不是第一种方法。 :
julia> f("Hello, world!"), f(0x01), f(1 + 2im), f(true)
(1, 2, 1, 2)
请注意,无论您在方法定义中添加什么类型签名,您都可以获得最大性能,当该方法实际运行时,它将根据具体输入被编译为特定版本类型。
关于polymorphism - Julia 函数签名中的 "not a subtype of",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58583605/
“多态”一词从何而来? 最佳答案 它来自希腊词根“poly”(许多)和“morphe”(形式)。多态对象可以采用多种形式(它可以由指向其任何祖先类的指针表示)。多态函数也可以有多种形式(它可以对实际上
我有一个名为 Frame 的基本结构这对一堆计算很有用:。 pub struct Frame { grid_val: Vec, grid_space: Vec, calcula
我有一个名为 Frame 的基本结构这对一堆计算很有用:。 pub struct Frame { grid_val: Vec, grid_space: Vec, calcula
“多态与方法重载或方法覆盖不同。......两者都不是......本身就是多态的实现”。 这是引自 wikipedia 然而,在“面向对象编程”一书中,Timothy Budd 指出有“四种不同形式的
我有一组我没有编写的类,它们是只读的。例如,假设这些类是以下类: public class Base { } public class B : Base { } public class C : B
什么是 Smalltalk 中的“无限动态多态性”?有人可以举个例子吗? 在这个 book 中提到了它:C++ 模板:完整指南,p. 238. 最佳答案 See在 C++ 中:通过继承实现的多态性是有
我在 Laravel 4 中有一个多态关系,它像我想要的那样工作。我有另一个,当我尝试插入相关模型时它不起作用,即使它与第一个相同并且我以相同的方式使用它。 我有 Event模型和 Article模型
我试图弄清楚如何在 Hack 中实现访客模式。它显然需要函数重载多态性,但正如我所测试的,这个例子: visitInt($m); } else if (is_string($m)) {
两者有什么区别? 具有 myMethod(int a) 的父类(super class)以及具有相同方法的继承类, 这是覆盖还是多态? 我很清楚黑白覆盖和重载的区别,但多态性和覆盖似乎是一样的。还是他
来自 Programming Languages: Principles and Paradigms, byMaurizio Gabbrielli, Simone Martini Definition
给定这段代码 locale A = fixes foo :: "'a" locale B = A + fixes bar :: "'a × 'a" locale C' = A + fixe
榆树市可能存在以下情况? func : a -> {a | id : Int} func x = { x | id = 123 } 由于a的多态性太强,因此无法编译。它认为可以是任何东西,包括非记录类
我只想有一个在 Hashtbls 上通用的简单函数,所以我写了这个: let iter_htbl (type a) (module H : Hashtbl.S with type key = a) h
我了解Polymorphic 和Metamorphic 代码的概念,但是最近我同时阅读了两者的Wikipedia页面(出于某种原因,我以前没有这样做过!)。现在,我真的很想为自己编写一些变形代码。 我
多态性是过载的另一个术语吗? 最佳答案 没有;重载是创建一个具有相同名称,带有不同数量参数或具有另一种类型参数的方法。 多态性是指在各种类型(都具有相同的“基本类型”)中更改特定方法的实现/功能。 重
我试图在 OCaml 中表示一组语法的产生式,存在类型对于建模语法规则的语义 Action 非常有用。我一直在研究 Menhir 源代码,存在类型也用于建模语义 Action 。考虑以下因素: typ
我在SML的学习上取得了一些进步,试图巩固我对一些最基本概念的理解。下面的练习证明还有很多东西要学。 我被要求实现一个名为 add 的函数,它接收两个数字并返回它们的总和。问题是,add 应该接收整数
首先,请看这些 Java 代码: Drawable.java package examples.simple.model; public interface Drawable { public
考虑以下代码: trait Animal { fn make_sound(&self) -> String; } struct Cat; impl Animal for Cat { f
考虑以下代码: trait Animal { fn make_sound(&self) -> String; } struct Cat; impl Animal for Cat { f
我是一名优秀的程序员,十分优秀!