当前位置: 首页 > 知识库问答 >
问题:

Integer、AbstractVector{Integer}和String的并集

公羊渝
2023-03-14

我有一个函数,在这个函数中,用户传递一个参数来选择应该处理矩阵的哪些列,如下所示:

function foo{P<:Real, T<:Integer}(;x::AbstractMatrix{P}=zeros(3, 10),    colN::Union(T, AbstractVector{T})=1)
   x[:,colN] = x[:,colN]+1
    return x
end

我想让用户有一种方法来指定应该处理所有列,最后我更改了函数,使其成为默认行为:

function foo{P<:Real, T<:Integer}(;x::AbstractMatrix{P}=zeros(3, 10), colN::Union(T, AbstractVector{T})=[1:size(x)[2]])
    x[:,colN] = x[:,colN]+1
    return x
end
 function foo{P<:Real, T<:Integer}(;x::AbstractMatrix{P}=zeros(3, 10), colN::Union(T, AbstractVector{T}, String)="all")
    if colN == "all"
        colN = [1:size(x)[2]]
    end
    x[:,colN] = x[:,colN]+1
    return x
end
foo(colN="all")
ERROR: `__foo#8__` has no method matching __foo#8__(::Array{Float64,2}, ::ASCIIString)

为什么一个整数、一个整数向量和一个字符串之间的联合似乎不起作用?

共有1个答案

澹台逸明
2023-03-14

问题是,当您传递字符串时,Julia无法推导出t类型,因此无法解决要调用哪个方法。

考虑以下两个函数:FG:

function f{T<:Integer}(x::Union(T,String)) 
    x 
end

function g{T<:Integer}(y::T, x::Union(T,String))
    x
end

在这种情况下,您将观察到以下行为:

  • F(1)1,因为T的值可以推导出来
  • f(“hello”)提供错误,因为t的值未知
  • G(1,“hello”)“hello”,因为T的值可以推导

话虽如此,我认为Julia使用多个分派而不是union类型来实现您想要做的事情会更合乎习惯。

更新。鉴于coln是一个字符串或索引列表,我相信使用t=int(或者int64可以处理大量内存)。将以下函数H与上面的FG进行比较:

function h(x::Union(Int,String)) 
    x 
end

在本例中,H(1)H(“hello”)都按预期工作(例如,H(1.0)引发错误)。

 类似资料:
  • 问题内容: 我想在for循环中使用附加到整数的字符串来创建字符串。像这样: 但是它返回一个错误: 连接字符串和整数的最佳方法是什么? 问题答案: 注意: 此答案中使用的方法(反引号)在更高版本的Python 2中已弃用,在Python 3中已删除str()。 你可以使用 : 它将打印。 为了得到你可以使用@YOU建议 按照Python3更新 你可以使用 : 它将打印。 为了得到你可以使用@YOU建

  • Question leetcode: String to Integer (atoi) | LeetCode OJ lintcode: (54) String to Integer(atoi) Implement function atoi to convert a string to an integer. If no valid conversion could be performed,

  • Roman to Integer 描述 Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999. 分析 从前往后扫描,用一个临时变量记录分段数字。 如果当前比前一个大,说明这一段的值应该是当前这个值减去上一个值。比如IV = 5 – 1;否则

  • Integer to Roman 描述 Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999. 分析 无 代码 // Integer to Roman // 时间复杂度O(num),空间复杂度O(1) class Solution {

  • 如果数字是整数,则返回true。 语法 (Syntax) 以下是语法。 (integer? number) 例子 (Example) 以下是整数测试函数的示例。 (ns clojure.examples.hello (:gen-class)) ;; This program displays Hello World (defn Example [] (def x (integer?

  • 问题内容: 我正在尝试将字符串转换为,但是得到了。 我的字串是,现在我将其转换为我所拥有的任何一个。 我如何将其转换为它们中的任何一个。 请帮助我摆脱这个问题。 问题答案: 您必须为数字使用适当的语言环境,例如 版画