【问题标题】:scilab local variables on different functions不同函数上的 scilab 局部变量
【发布时间】:2014-06-19 02:24:34
【问题描述】:

所以我有这样的事情,我正在调用 fun3,它调用 fun1。 在 fun1 中,用户在变量 a 和 b 中输入一些文本,然后 fun2 使用它,但是我如何链接不同函数中的局部变量,然后将它们带到 fun3 以使用它们,我是否必须定义它们先在主程序中?

我知道我必须在函数中使用输入和输出参数,但我认为我做错了我把它们留空以便有人帮我完成它们

函数

function [] = fun1 ()
    a=input("input is text")
    b=input("input is text")
end function

function [] = fun2()
    printf("a is b")
end function

function [] = fun3()
    fun1()
    fun2()
    disp(a)
    disp(b)
end function

主程序

fun3()

【问题讨论】:

    标签: function scilab


    【解决方案1】:

    欢迎来到编程/SciLab 的世界。有很棒的教程,例如these,可以帮助您入门。在the SciLab wiki 上查找其他人的列表。

    为了回答您的问题,让我们逐个查看每个函数。

    乐趣1

    此函数需要向用户询问两个字符串 a 和 b。我认为您的意思是输入是字符串,因此根据the input function docs,我们应该在调用中添加“字符串”。另请参阅链接上的示例。为了让 fun1 将这些返回到字符串,我们将它们放在函数的输出参数中。

    function [a,b] = fun1()
        a=input("input a is text: ", "string")
        b=input("input b is text: ", "string")
    endfunction
    

    乐趣2

    因为您使用了 printf,所以我假设您想打印 a 和 b 以及一些额外的文本。您可以在this page 的底部看到一些使用 printf 的示例。要打印它们,我们需要知道值,因此指定 a 和 b 作为输入参数。

    function [] = fun2(a,b)
        printf("a (%s) is b (%s)", a, b)
    endfunction
    

    乐趣3

    在 fun3 中,您想要调用获取用户输入的函数 fun1 并且无论它返回什么,您想要发送到 fun2 打印两者。然后你想再次打印这些值。

    请注意,使用函数时,名称不必与局部变量的名称相同。

    function [] = fun3()
        [c,d] = fun1()
        fun2(c,d)
        disp(c)
        disp(d)
    endfunction
    

    回答您的问题

    在主程序中定义变量使它们成为全局变量。如果可以避免这种情况,请始终避免这种情况。如上所示,始终尝试仅使用局部变量并使用正确的输入和输出变量。通过这种方式,您可以一眼就知道流入函数和流出函数的每个变量。它使测试您的功能变得更加容易。如果你知道一个函数是通过尝试各种输入并检查输出来工作的,你可以忘记它并使用它。

    也看看为什么globals are bad。它是关于 c 的,但他提出了一些有效的观点。

    终于

    我建议先做一些教程,以获得和理解基本的东西。

    【讨论】:

    • 工作得很好。感谢您对函数参数的解释,我在将变量的输入设为字符串时遇到了一些问题。另外,如果我想将其中一些变量调用到主代码中,我应该如何为它输入函数? [a,b]= fun1 ??如果我希望恢复这些变量的值,那么稍后会在主程序上调用该函数的输入?
    • 我不完全理解你的问题,你的意思是你想让fun3传递cd的值吗?您可以编辑fun3 以返回它们[c,d] = fun3,并且在您的主程序中您可以只使用c d,这将与ab 中的fun1 中的值相同
    猜你喜欢
    • 1970-01-01
    • 2022-08-02
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多