朱莉娅:传递一个复合类型的字段作为参数

时间:2017-10-05 20:05:14

标签: types julia compositetype

考虑以下示例

    @using System.Dynamic
@using System.Linq
@using System.Data.Common
@using CeleroPortal.Models.ConstraintsAnalysis
@using System.Collections.Generic
@using System.Web.Mvc.Html
@using System.Web.Mvc.Razor
@model mdlViews
@using PagedList.Mvc
@{
    ViewBag.Title = "View Report records Page";
    var result = new List<dynamic>();
    int rowcnt = 0;
    foreach (var recRow in Model.DlList)
    {
        var row = (IDictionary<string, object>)new ExpandoObject();
        Dictionary<string, object> eachFieldRow = (Dictionary<string, object>)recRow;     //for when list was string,object
        foreach (KeyValuePair<string, object> keyValuePair in eachFieldRow)
        {
            row.Add(keyValuePair.Key, keyValuePair.Value);
        }
        result.Add(row);
        rowcnt++;
    }

    //WebGrid grid = new WebGrid(source: result, rowsPerPage: Model.PageSize, canPage: true, canSort: true, sortFieldName: Model.Sort, sortDirectionFieldName: Model.SortDir);
    WebGrid grid = new WebGrid(rowsPerPage: Model.PageSize, canPage: true, canSort: false, sortFieldName: Model.Sort, sortDirectionFieldName: Model.SortDir);
    List<WebGridColumn> cols = new List<WebGridColumn>();
    cols.Add(grid.Column("Order ID","Order ID"));
    cols.Add(grid.Column("Part ID", "Part ID"));
    cols.Add(grid.Column("Description", "Description"));
    cols.Add(grid.Column("Customer ID", "Customer ID"));
    cols.Add(grid.Column("Customer", "Customer"));
    cols.Add(grid.Column("Qty Due", "Quantity Due"));
    cols.Add(grid.Column("Target Date", "Target Date"));
    cols.Add(grid.Column("Days", "Days"));
    cols.Add(grid.Column("Final Date", "Final Date"));
    for (int i = 9; i < Model.DictionaryList[0].Count(); i++)
    {
        if (Model.DictionaryList[0].Keys.ElementAt(i).StartsWith("#"))
        {
            cols.Add(grid.Column(Model.DictionaryList[0].Keys.ElementAt(i).ToString(), Model.DictionaryList[0].Keys.ElementAt(i).ToString()));
        }
        else
        {
            //cols.Add(grid.Column(Model.DictionaryList[i].Keys.ElementAt(i).ToString(),header: Model.DictionaryList[i].Keys.ElementAt(i).ToString(),
            //   format: (Model) => Html.ActionLink((string)Model.DictionaryList[i].Values.ElementAt(i).ToString(), "Select_MSPart_Search",
            //   "MasterSupply",new { id = ViewData["id"] , type = 1, SearchFilter = Model.DictionaryList[i].Keys.ElementAt(i).ToString() , SearchValue = "",
            //   rowsPerPage = 7}),style: "column-action"));
            cols.Add(grid.Column(header:Model.DictionaryList[i].Keys.ElementAt(i).ToString(),columnName: Model.DictionaryList[i].Keys.ElementAt(i).ToString(),
                       format: @<Text>@Html.ActionLink((string)Model.DictionaryList[i].Values.ElementAt(i).ToString(), "Select_MSPart_Search",
                       "MaterialSupply", new
                       {
                           id = ViewData["id"],
                           type = 1,
                           SearchFilter = Model.DictionaryList[i].Keys.ElementAt(i).ToString(),
                           SearchValue = "",
                           rowsPerPage = 7
                       })</Text>, style: "column-action"));
            //cols.Add(grid.Column(header: Model.DictionaryList[i].Keys.ElementAt(i).ToString(),columnName: Model.DictionaryList[i].Keys.ElementAt(i).ToString(),
            //                        format: (item) => @Html.ActionLink((string)Model.DictionaryList[i].Values.ElementAt(i).ToString(), "Select_MSPart_Search",
            //                        "MaterialSupply", new
            //                        {
            //                            id = ViewData["id"],
            //                            type = 1,
            //                            SearchFilter = Model.DictionaryList[i].Keys.ElementAt(i).ToString(),
            //                            SearchValue = "",
            //                            rowsPerPage = 7
            //                        }, null)));
        }
    }
    grid.Bind(result, rowCount: Model.TotalRecords, autoSortAndPage: true);
    grid.Pager(WebGridPagerModes.All);
}

<style type="text/css">
    .webgrid-table {
        font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
        font-size: 1.2em;
        width: 100%;
        display: table;
        border-collapse: separate;
        border: solid 1px #000066; /*#98BF21;*/
        background-color: white;
    }

        .webgrid-table td, th {
            border: 1px solid #000099; /*#98BF21;*/
            padding: 3px 7px 2px;
        }

    .webgrid-header {
        background-color: #b3d9ff; /*#A7C942;*/
        color: #FFFFFF;
        padding-bottom: 4px;
        padding-top: 5px;
        text-align: left;
    }

    .webgrid-footer {
    }

    .webgrid-row-style {
        padding: 3px 7px 2px;
    }

    .webgrid-alternating-row {
        background-color: #e6f2ff; /*#EAF2D3;*/
        padding: 3px 7px 2px;
    }

    .webgrid-selected-row {
        background-color: #ffff66; /*#EAF2D3;*/
        padding: 3px 7px 2px;
    }
</style>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<div class="jumbotron">
    <h1><img src="~/Images/Celero.png" /></h1>
    <p class="lead">Constraints Analysis Application Pushed Orders Grid</p>
    <div>
        @Html.ActionLink("Search for Part across reports",  "Select_MSPart", "MaterialSupply", new { id = ViewData["Id"].ToString(), type = ViewData["type"]},null)
    </div>
</div>
<div class="row">
    @using (Html.BeginForm("Views", "ConstraintsAnalysis", new { id = ViewData["id"], type = ViewData["type"] }, FormMethod.Post))
    {
        <div class="row">
            <div class="form-horizontal" style="float: left">
                <div class="col-md-4">
                    @if (Model.RwsPrPge == Model.TotalRecords)
                    {
                        <select id="rwsPrPge" name="rwsPrPge">
                            <option value="5">50</option>
                            <option value="0">All</option>
                        </select>
                    }
                    else
                    {
                        <select id="rwsPrPge" name="rwsPrPge">
                            <option value="0">All</option>
                            <option value="5">50</option>
                        </select>
                    }
                    <input type="submit" value="Rows/Page" />
                    @Html.Hidden("id", (object)ViewData["Id"].ToString())
                    @Html.Hidden("type", (object)ViewData["type"].ToString())
                </div>
                <div class="col-lg-4">
                    @*@Html.DropDownListFor(Model => Model.SearchFilter, new SelectList(ViewBag.SelectFilter, "Value", "Text"),
                        "Select Part for Search", new { @class = "form-control", @placeholder = "Search Filter" })*@
                    @Html.DropDownList("m", new SelectList(ViewBag.SelectFilter, "Value", "Text"), "Select Part")
                </div>
                <div class="col-lg-4" float="right">
                    &emsp;
                    <button type="submit" class="btn btn-success" value="m">
                        <span class="glyphicon glyphicon-search"></span>
                    </button>
                </div>
                <br /><br />
                <div class="col-md-4">
                    <select id="Export" name="Export">
                        <option value="00">No Export</option>
                        <option value="XX">Export to CSV</option>
                        @Html.EditorFor(model => model.DlList)
                        @Html.ValidationMessageFor(model => model.DlList)
                    </select>
                </div>
                <div class="col-md-4">
                    <button type="submit" class="btn btn-success" value="Export" href="/ConstraintsAnalysis/Views">
                        <span class="glyphicon glyphicon-export"></span>
                    </button>
                </div>
            </div>
        </div>
        if (Model != null)
        {
            <span>
                &nbsp;
                <span class="vam" style="float: left">
                    @Html.ActionLink("Report Selection Menu", "Index", "ConstraintsAnalysis")
                </span>
                &nbsp;
                <span class="vam">
                    @grid.GetHtml(tableStyle: "table table-bordered table-hover",
                            headerStyle: "webgrid-header",
                            footerStyle: "webgrid-footer",
                            alternatingRowStyle: "webgrid-alternating-row",
                            selectedRowStyle: "webgrid-selected-row",
                            caption: "Celero Constraints Grid",
                            rowStyle: "webgrid-row-style");
                </span>
            </span>
        }
    }
</div>

我想创建一个函数struct valueStruct a::Vector{Float64} a2::Vector{Float64} end values = valueStruct(ones(10), ones(10)); values2 = 1:10; function testFunc!(values, values2) values.a .= values.a .* values2; end ,以便它可以接受testFunc2!而不是整个对象。例如:field。但是,我一直收到这个错误:

testFunc2!(values.a, values2)

我想这样做,因为在我的实际代码中,我想在结构LoadError: LoadError: syntax: "values.a" is not a valid function argument name的循环中递归地应用testFunc!,例如values。我知道我可以这样做:

testFunc!(values.a2, values.a)

但是,这不是我想要的。在我的实际代码中,我需要一个灵活的函数,以便我可以将它应用于一个类型的字段。这可能吗?

1 个答案:

答案 0 :(得分:1)

我不明白这个问题。这很好用:

struct ValueStruct
    a::Vector{Float64}
    a2::Vector{Float64} 
end

function testfunc!(a, b)
    a .*= b
end

values = ValueStruct(ones(10), ones(10))
values2 = 1:10
testfunc!(values.a, values2)

顺便说一句:朱莉娅有一个强烈的惯例,即类型名称应该大写:ValueStruct,而不是valueStruct。还有一个约定,函数名称应全部小写,但似乎不那么严格。