產(chǎn)品介紹
什么是數(shù)環(huán)通
基礎(chǔ)概念講解
應(yīng)用場景
多渠道數(shù)據(jù)融合
業(yè)務(wù)、財務(wù)、辦公自動化
產(chǎn)業(yè)鏈應(yīng)用與數(shù)據(jù)集成
工業(yè)應(yīng)用與設(shè)備互聯(lián)
智慧園區(qū)與未來社區(qū)
快速入門
創(chuàng)建LinkUp
應(yīng)用授權(quán)
判斷用法
監(jiān)控用法
分支用法
列表逐條處理
變量與表達式
流程管理
項目管理
流程創(chuàng)建
編輯器操作
單步測試與預(yù)覽
試運行
發(fā)布與版本管理
錯誤步驟重試
數(shù)據(jù)同步
JSON Path 使用
輸出處理
數(shù)據(jù)編排
1、功能使用手冊
2、腳本使用手冊
1 、簡單查詢
2、謂詞查詢
3、函數(shù)與表達式
4、構(gòu)建結(jié)構(gòu)結(jié)果
5、查詢組合
6、排序、分組和聚合
7、處理模型
8、函數(shù)式編程
9、正則表達式
10、日期、時間處理
11、路徑運算符
12、數(shù)字運算符
13、比較運算符
14、布爾運算符
15、其他運算符
16、字符串函數(shù)
17、數(shù)值函數(shù)
18、 數(shù)字聚合函數(shù)
19、布爾函數(shù)
20、數(shù)組函數(shù)
21、對象函數(shù)
22、日期/時間函數(shù)
23、高階函數(shù)
運行日志
運行記錄
開發(fā)工具
連接器工具
連接器源碼配置
控件類型配置
腳本配置說明
內(nèi)置函數(shù)
應(yīng)用講解
內(nèi)置應(yīng)用
瀏覽器插件
數(shù)據(jù)表
文本字符串
日期
數(shù)據(jù)篩選
數(shù)據(jù)處理
延時處理
數(shù)學(xué)計算器
定時觸發(fā)器
子流程調(diào)用
手動觸發(fā)器
物流地址解析
腳本執(zhí)行器
自定義變量
文件讀取
Webhook
SMTP發(fā)送郵件
文件傳輸
JSON工具
網(wǎng)絡(luò)工具
消息處理
PDF水印工具
文件存儲
API服務(wù)
Http請求
循環(huán)控制
EDI 自定義標(biāo)準數(shù)據(jù)轉(zhuǎn)換
對象類型判斷
瀏覽器操作
三方應(yīng)用
簡道云
金山數(shù)據(jù)表
抖音
釘釘(自建應(yīng)用)
語雀
金山表單
微信公眾號
企業(yè)微信群機器人
聚水潭
企業(yè)微信三方授權(quán)
MySQL
SqlServer
ChatGpt
快手
金山輕維表
抖店
維格表
巨量千川
飛書多維表
釘釘機器人
飛書(自建)
釘釘
百度網(wǎng)盤
QQ郵箱
金山工作表
易知微DTable
MQTT
Doirs
中通快遞
韻達速遞
企業(yè)微信(代開發(fā))
知乎效果營銷平臺
飛書云文檔
騰訊企業(yè)郵箱
API管理
API管理概述
數(shù)據(jù)概覽
API服務(wù)
訪問憑證
API門戶
API安全密鑰簽名
API監(jiān)控預(yù)警
擴展工具
代理網(wǎng)關(guān)
消息處理
管理中心
企業(yè)管理
操作日志
成員管理
開放平臺
開放平臺簡介
接入教程
常見問題
數(shù)環(huán)通ip白名單
最佳實踐
彥祖文化 |通過數(shù)環(huán)通實現(xiàn)全渠道數(shù)據(jù)融合打通
新石器|通過數(shù)環(huán)通實現(xiàn)跨系統(tǒng)、跨部門高效協(xié)同
幫助首頁
數(shù)據(jù)編排
2、腳本使用手冊
8、函數(shù)式編程
8、函數(shù)式編程
# 編程構(gòu)造 到目前為止,我們已經(jīng)介紹了該語言的所有部分,這些部分使我們能夠從輸入 JSON 文檔中提取數(shù)據(jù)、使用字符串和數(shù)字運算符組合數(shù)據(jù)以及格式化輸出 JSON 文檔的結(jié)構(gòu)。接下來是將其轉(zhuǎn)變?yōu)閳D靈完備的函數(shù)式編程語言的部分。 ## 說明 表達式可以使用“C”樣式注釋分隔符與注釋交錯。例如, ``` /* Long-winded expressions might need some explanation */ ( $pi := 3.1415926535897932384626; $plot := function($x) {( $floor := $string ~> $substringBefore(?, '.') ~> $number; $index := $floor(($x + 1) * 20 + 0.5); $join([0..$index].('.')) & 'O' & $join([$index..40].('.')) )}; /* Factorial is the product of the integers 1..n */ $product := function($a, $b) { $a * $b }; $factorial := function($n) { $n = 0 ? 1 : $reduce([1..$n], $product) }; $sin := function($x){ /* define sine in terms of cosine */ $cos($x - $pi/2) }; $cos := function($x){ /* Derive cosine by expanding Maclaurin series */ $x > $pi ? $cos($x - 2 * $pi) : $x < -$pi ? $cos($x + 2 * $pi) : $sum([0..12].($power(-1, $) * $power($x, 2*$) / $factorial(2*$))) }; [0..24].$sin($*$pi/12).$plot($) ) ``` 如果您有興趣的話,可以制作[這個]()! ## 條件邏輯 可以使用三元運算符“?:”編寫 If/then/else 結(jié)構(gòu)。 `predicate ? expr1 : expr2` 表達式 `predicate` 被求值。如果其有效布爾值(參見定義)為 `true`,則 `expr1` 求值并返回,否則 `expr2` 求值并返回。 **示例** ``` Account.Order.Product.{ `Product Name`: $.Price > 100 ? "Premium" : "Basic" } //結(jié)果 [ { "Bowler Hat": "Basic" }, { "Trilby hat": "Basic" }, { "Bowler Hat": "Basic" }, { "Cloak": "Premium" } ] ``` ## 變量 任何以美元符號“$”開頭的名稱都是變量。變量是對值的命名引用。該值可以是語言[類型系統(tǒng)]()中的任意類型。 ### 內(nèi)置變量 * `$` 沒有名稱的變量指的是輸入 JSON 層次結(jié)構(gòu)中任意一點的上下文值。示例 * `$$` 輸入 JSON 的根。僅當(dāng)您需要脫離當(dāng)前上下文以暫時導(dǎo)航到其他路徑時才需要。例如用于交叉引用或連接數(shù)據(jù)。示例 * 本機(內(nèi)置)函數(shù)。請參閱函數(shù)庫。 ### 變量綁定 值(類型系統(tǒng)中的任意類型)可以綁定到變量 `$var_name := "value"` 稍后可以使用表達式引用存儲的值 `$var_name`。 變量的作用域僅限于它所綁定的“塊”。例如 ``` Invoice.( $p := Product.Price; $q := Product.Quantity; $p * $q ) ``` 返回發(fā)票中產(chǎn)品價格乘以數(shù)量。 ## 功能 函數(shù)是一等類型,可以像任何其他數(shù)據(jù)類型一樣存儲在變量中。提供了內(nèi)置函數(shù)庫(鏈接)并將其分配給全局范圍內(nèi)的變量。例如,`$uppercase` 包含一個函數(shù),當(dāng)使用字符串參數(shù)調(diào)用時,`str` 將返回一個字符串,其中 中的所有字符都 `str` 更改為大寫。 ### 調(diào)用函數(shù) 函數(shù)的調(diào)用是通過在其引用(或定義)后面加上包含逗號分隔的參數(shù)序列的括號來實現(xiàn)的。 **示例** * `$uppercase("Hello")` 返回字符串“HELLO”。 * `$substring("hello world", 0, 5)` 返回字符串“hello” * `$sum([1,2,3])` 返回數(shù)字 6 ### 定義函數(shù) 可以使用以下語法定義匿名(lambda)函數(shù): `function($l, $w, $h){ $l * $w * $h }` 可以使用以下方式調(diào)用 `function($l, $w, $h){ $l * $w * $h }(10, 10, 5)` 返回 500 該函數(shù)還可以分配給變量以供將來使用(在塊內(nèi)) ```( $volume := function($l, $w, $h){ $l * $w * $h }; $volume(10, 10, 5); ) ``` ### 函數(shù)簽名 函數(shù)可以用可選簽名來定義,該簽名指定函數(shù)的參數(shù)類型。如果提供,評估引擎將在調(diào)用函數(shù)之前驗證傳遞給函數(shù)的參數(shù)。如果參數(shù)列表與簽名不匹配,則會引發(fā)動態(tài)錯誤。 函數(shù)簽名是形式為 的字符串 `<params:return>`。`params` 是類型符號序列,每個符號代表一個輸入?yún)?shù)的類型。`return` 是表示返回值類型的單個類型符號。 類型符號的工作原理如下: 簡單類型: * `b`- boolean * `n`-number * `s`- string * `l`-`null` 復(fù)雜類型: * `a`- array * `o`- object * `f`- function 聯(lián)合類型: * `(sao)`- string、array、objct * `(o)`- 等同 `o` * `u`- 相當(dāng)于 `(bnsl)` boolean、number、string、`null` * `j`- 任何 JSON 類型。相當(dāng)于 `(bnsloa)` boolean、number、string、 `null`、對象或數(shù)組,但不是函數(shù) * `x`- 任何類型。相當(dāng)于 `(bnsloaf)` 參數(shù)化類型: * `a<s>`- 字符串?dāng)?shù)組 * `a<x>`- 任意類型的值數(shù)組 內(nèi)置 函數(shù)簽名的一些示例: * `$count` 有簽名 `<a:n>`;它接受一個數(shù)組并返回一個數(shù)字。 * `$append` 有簽名 `<aa:a>`;它接受兩個數(shù)組并返回一個數(shù)組。 * `$sum` 有簽名 `<a<n>:n>`;它接受一個數(shù)字數(shù)組并返回一個數(shù)字。 * `$reduce` 有簽名 `<fa<j>:j>`;它接受一個 Reducer 函數(shù) `f` 和一個 `a<j>`(JSON 對象數(shù)組)并返回一個 JSON 對象。 每種類型符號也可能有應(yīng)用的 *選項* 。 * `+`- 一個或多個此類型的參數(shù) * 例如 `$zip` 有簽名 `<a+>`;它接受一個數(shù)組,或兩個數(shù)組,或三個數(shù)組,或...... * `?`- 可選參數(shù) * 例如 `$join` 有簽名 `<a<s>s?:s>`;它接受一個字符串?dāng)?shù)組和一個可選的連接字符串(默認為空字符串)。它返回一個字符串。 * `-`- 如果缺少此參數(shù),則使用上下文值(“focus”)。 * 例如 `$length` 有簽名 `<s-:n>`;它可以被稱為 `$length(OrderID)`(一個參數(shù)),但等效于 `OrderID.$length()`。 ### 遞歸函數(shù) 已分配給變量的函數(shù)可以使用該變量引用來調(diào)用自身。這允許定義遞歸函數(shù)。例如。 ``` ( $factorial:= function($x){ $x <= 1 ? 1 : $x * $factorial($x-1) }; $factorial(4 ) //結(jié)果 24 ``` 請注意,實際上可以使用純匿名函數(shù)(即不將任何內(nèi)容分配給變量)編寫遞歸函數(shù)。這是使用[Y-combinator]()完成的,對于那些對函數(shù)式編程感興趣的人來說,這可能是一個有趣的[消遣。]() ### 尾調(diào)用優(yōu)化(尾遞歸) 遞歸函數(shù)每次調(diào)用自身時都會向調(diào)用堆棧添加一個新框架。如果函數(shù)回退超過一定限制,這最終會導(dǎo)致堆棧耗盡。考慮階乘函數(shù)的經(jīng)典遞歸實現(xiàn) ``` ( $factorial := function($x) { $x <= 1 ? 1 : $x * $factorial($x-1) }; $factorial(170) ) ``` 此函數(shù)的工作原理是將數(shù)字推送到堆棧上,然后在堆棧展開時將其乘以數(shù)字階乘減一的結(jié)果。以這種方式編寫,評估器別無選擇,只能使用調(diào)用堆棧來存儲中間結(jié)果。如果數(shù)字足夠大,調(diào)用堆棧就會溢出。 這是函數(shù)式編程中公認的問題,解決方案是稍微重寫函數(shù)以避免需要*堆棧*來存儲中間結(jié)果。以下階乘的實現(xiàn)實現(xiàn)了這一點 ``` ( $factorial := function($x){( $iter := function($x, $acc) { $x <= 1 ? $acc : $iter($x - 1, $x * $acc) }; $iter($x, 1) )}; $factorial(170) ) ``` 這里,乘法是*在*函數(shù)調(diào)用自身之前完成的,中間結(jié)果放在第二個參數(shù) `$acc`(累加器)中。調(diào)用自身是函數(shù)執(zhí)行的*最后一*件事。這被稱為“尾部調(diào)用”,當(dāng) 解析器發(fā)現(xiàn)這一點時,它會在內(nèi)部將遞歸重寫為一個簡單的循環(huán)。因此它可以無限期地運行而不會增加調(diào)用堆棧。以這種方式編寫的函數(shù)被稱為[尾部遞歸]()。 ### 高階函數(shù) 函數(shù)是一等數(shù)據(jù)類型,可以作為參數(shù)傳遞給另一個函數(shù),也可以從函數(shù)返回。處理其他函數(shù)的函數(shù)稱為高階函數(shù)。請考慮以下示例: ``` ( $twice := function($f) { function($x){ $f($f($x)) } }; $add3 := function($y){ $y + 3 }; $add6 := $twice($add3); $add6(7) ) ``` * 變量中存儲的函數(shù) `$twice` 是高階函數(shù)。它接受一個 `$f` 函數(shù)參數(shù),并返回一個接受參數(shù)的函數(shù),該函數(shù) `$x` 在調(diào)用時會將該函數(shù)應(yīng)用 `$f` 兩次 `$x`。 * `$add3` 存儲一個將 3 添加到其參數(shù)的函數(shù)。`$twice` 或 都 `$add3` 尚未被調(diào)用。 * `$twice` 通過將函數(shù)作為其參數(shù)傳遞來調(diào)用。這將返回一個對其 `add3` 參數(shù)應(yīng)用 `$add3` 兩次的函數(shù)。這個返回的函數(shù)尚未被調(diào)用,而是被分配給變量。`add6` * 最后,使用參數(shù) 7 調(diào)用函數(shù) `$add6`,結(jié)果將 3 加到該函數(shù)兩次。它返回 13。 ### 函數(shù)是閉包 定義 lambda 函數(shù)時,求值引擎會獲取環(huán)境快照并將其與函數(shù)體定義一起存儲。環(huán)境由上下文項(即位置路徑中的當(dāng)前值)以及當(dāng)前范圍內(nèi)的變量綁定組成。稍后調(diào)用 lambda 函數(shù)時,將在存儲的環(huán)境中執(zhí)行,而不是在調(diào)用時的當(dāng)前環(huán)境中執(zhí)行。此屬性稱為*詞法作用域,是* *閉包*的基本屬性。 請考慮以下示例: ``` Account.( $AccName := function() { $.'Account Name' }; Order[OrderID = 'order104'].Product.{ 'Account': $AccName(), 'SKU-' & $string(ProductID): $.'Product Name' } ) ``` 當(dāng)函數(shù)被創(chuàng)建時,上下文項(用 '$' 表示)是 的值 `Account`。稍后,當(dāng)函數(shù)被調(diào)用時,上下文項已在結(jié)構(gòu)中向下移動到每個 `Product` 項的值。但是,函數(shù)體是在定義時存儲的環(huán)境中調(diào)用的,因此其上下文項是 的值 `Account`。這是一個有點牽強的例子,你實際上不需要一個函數(shù)來做到這一點。表達式產(chǎn)生以下結(jié)果: ``` { "Account": "Firefly", "SKU-858383": "Bowler Hat", "SKU-345664": "Cloak" } ``` ### 部分函數(shù)應(yīng)用 可以通過調(diào)用函數(shù)[來部分應(yīng)用]()函數(shù),其中一個或多個(但不是全部)參數(shù)用問號占位 `?` 符替換。這樣做的結(jié)果是另一個函數(shù),其參數(shù)數(shù)量減少了提供給原始函數(shù)的參數(shù)數(shù)量。這個返回的函數(shù)可以像任何其他新定義的函數(shù)一樣處理,例如綁定到變量、傳遞給高階函數(shù)等。 **示例** * `$substring` 通過部分應(yīng)用函數(shù)創(chuàng)建一個函數(shù)來返回字符串的前五個字符 ``` ( $first5 := $substring(?, 0, 5); $first5("Hello, World") ) //結(jié)果 "Hello" ``` * 部分應(yīng)用函數(shù)可以進一步部分應(yīng)用 ``` ( $firstN := $substring(?, 0, ?); $first5 := $firstN(?, 5); $first5("Hello, World") ) //結(jié)果 "Hello" ``` ### 函數(shù)鏈 函數(shù)鏈接有兩種使用方式: 1. 當(dāng)多個函數(shù)應(yīng)用于一個值時,避免大量嵌套 2. 作為通過組合現(xiàn)有函數(shù)來定義新函數(shù)的高階構(gòu)造 #### 調(diào)用鏈 `value ~> $funcA ~> $funcB` 相當(dāng)于 `$funcB($funcA(value))` **示例** * `Customer.Email ~> $substringAfter("@") ~> $substringBefore(".") ~> $uppercase()` #### 函數(shù)組合 [函數(shù)組合](https://en.wikipedia.org/wiki/Function_composition)是將一個函數(shù)應(yīng)用到另一個函數(shù)中以產(chǎn)生第三個函數(shù)。 `$funcC := $funcA ~> $funcB` 相當(dāng)于 `$funcC := function($arg) { $funcB($funcA($arg)) }` **示例** * 通過鏈接兩個現(xiàn)有函數(shù)來創(chuàng)建新函數(shù) ``` ( $normalize := $uppercase ~> $trim; $normalize(" Some Words ") ) //結(jié)果 "SOME WORDS" ``` ### 函數(shù)作為第一類值 函數(shù)組合可以與部分函數(shù)應(yīng)用相結(jié)合,產(chǎn)生用于定義新函數(shù)的非常緊湊的語法。 **示例** * 通過鏈接兩個部分求值的函數(shù)來創(chuàng)建新函數(shù) ``` ( $first5Capitalized := $substring(?, 0, 5) ~> $uppercase(?); $first5Capitalized(Address.City) ) //結(jié)果 "WINCH" ``` ### 高級示例——Y-combinator 沒有必要閱讀本節(jié)——它不會對您的理智或操作 JSON 數(shù)據(jù)的能力產(chǎn)生任何影響。 前面我們學(xué)習(xí)了如何編寫遞歸函數(shù)來計算數(shù)字的階乘,并暗示這可以在不命名任何函數(shù)的情況下完成。我們可以將高階函數(shù)發(fā)揮到極致,并編寫以下內(nèi)容: ``` λ($f) { λ($x) { $x($x) }( λ($g) { $f( (λ($a) {$g($g)($a)}))})}(λ($f) { λ($n) { $n < 2 ? 1 : $n * $f($n - 1) } })(6) ``` 得出結(jié)果 `720`。希臘符號 lambda (λ) 可以代替單詞 `function`,如果你能在鍵盤上找到它,它將節(jié)省屏幕空間并讓[lambda 演算]()的粉絲們滿意。 上述表達式的第一部分是該語言中[Y 組合器]()的實現(xiàn)。我們可以將其分配給一個變量并將其應(yīng)用于其他遞歸匿名函數(shù): ``` ( $Y := λ($f) { λ($x) { $x($x) }( λ($g) { $f( (λ($a) {$g($g)($a)}))})}; [1,2,3,4,5,6,7,8,9] . $Y(λ($f) { λ($n) { $n <= 1 ? $n : $f($n-1) + $f($n-2) } }) ($) ) ``` 產(chǎn)生斐波那契數(shù)列 `[ 1, 1, 2, 3, 5, 8, 13, 21, 34 ]`。 但我們不需要做任何這些。使用命名函數(shù)更為明智: ```( $fib := λ($n) { $n <= 1 ? $n : $fib($n-1) + $fib($n-2) }; [1,2,3,4,5,6,7,8,9] . $fib($) ) ```
上一篇
7、處理模型
下一篇
9、正則表達式
手機掃碼
復(fù)制鏈接
手機掃一掃轉(zhuǎn)發(fā)分享
復(fù)制鏈接
Markdown文件
分享
鏈接
類型
密碼
更新密碼
主站蜘蛛池模板:
津南人才网_津南招聘网_求职找工作平台
|
泉州小吃培训_福建泉州本地特色小吃培训班|厨师技术培训学校-魅力小吃培训服务机构
|
域发官网-皮肤学级头皮养固领先者
|
山西亿企邦财税服务有限公司
|
斜管填料_斜板填料_纤维球_果壳活性炭_立体网状填料_纤维球厂家-巩义市德科净水材料有限公司
|
空气消毒机厂家-医用空气消毒机-医用空气净化器-山东佳境医疗
|
山东鑫佳日化_洗衣粉生产厂家,从事洗衣粉加工出口
|
台式氙灯老化箱-光伏组件-真空老化试验箱|中科万通仪器官网
|
耐磨复合钢板_堆焊复合钢板_堆焊耐磨钢板-北京耐默公司
|
宣城安安橡塑有限责任公司
|
铜陵金玉米业有限责任公司【官网】
|
输送机|滚筒输送机|皮带输送机|滚筒|无动力滚筒|万向球生产厂家-上海霞韵输送机械设备有限公司
|
频闪仪,便携式频闪仪厂家_灯管,频闪仪之父-杭州品拓电子技术有限公司
|
中江网-中国江苏网·新江苏, 全国重点新闻网站
|
面粉加工设备-面粉加工机械-面粉机组-面粉磨粉机-面粉机成套设备-河南粮院机械制造有限公司
|
喷涂流水线,喷漆流水线-山东天意设备科技
|
免费的动态思维导图软件,脑图大师,思维导图制作软件 - 万彩脑图大师官网
|
新密耐火材料厂家价格-河南郑州荣盛窑炉耐火材料有限公司
|
河北省金融租赁有限公司官网
|
专业音响设备|数字功放|舞台音响|ktv音响|会议音响-劳伦士
|
阴_阳离子聚丙烯酰胺价格_聚合氯化铝厂家_聚合硫酸铁-巩义市亿洋水处理材料有限公司
|
气泡膜机_气垫膜机_缠绕膜机_瑞安市优特机械厂
|
自恢复保险丝_贴片保险丝_插件保险丝_力特保险丝_力特经销商_SMD贴片保险丝_一次性保险丝厂家—深圳市集电通实业有限公司
|
碳纤维棒_碳纤维管_碳纤维缠绕管_嘉兴恒隆复合材料有限公司
|
搅拌摩擦焊-搅拌摩擦焊接机床-搅拌摩擦焊设备厂家-精科大恒
|
合肥固化地坪-安徽耐磨地坪-合肥环氧地坪厂家-安徽玉平地坪工程有限公司
|
消防施工,消防工程施工,消防施工改造-北京消防工程公司-亿杰(北京)消防工程有限公司
|
宁波雷豹机电科技有限公司|雷豹冷风机|雷豹工业大风扇|MFC18000|MFC16000|MFC6000|EF3622|EF4222|EF4822|移动工业蒸发式冷风机空气冷却器|大型工业空调扇|雷豹移动式工业大风扇|雷豹大风扇|生产厂家|公司官网
|
徐州护栏,铝艺栏杆,铝艺大门,铝艺栏杆门,别墅铝艺大门-徐州桂丰金属科技有限公司
|
真空电镀机_镀膜机厂家_离子镀膜机_磁控溅射镀膜设备_镀钛设备-江苏驰诚科技发展有限公司
|
山东华德耐特工业设备有限公司-仓储货架-钢托盘-物流车-周转箱-工位器具
|
水平转头微孔板离心机-米欧微孔板离心机-北京乾明基因技术
|
重庆监控安装_监控系统工程_高清监控摄像头-重庆监控系统安装公司
|
液位变送器_智能压力变送器_3051差压变送器_单双法兰,投入式,电容式,温度变送器-淮安润中仪表科技有限公司
|
汽油发电机,柴油发电机,小型汽油发电机,小型柴油发电机,家用发电机生产厂家——上海东明动力设备有限公司
|
组合包装箱,折叠包装箱,烟台木箱,烟台包装箱-烟台顺达包装有限责任公司
|
意优教育|意大利留学中介_意大利留学费用_意大利申请条件_北京意大利语培训学校
|
上饶市蚂蚁搬家有限公司,上饶搬家公司,上饶同城搬家,上饶同城搬家电话,上饶搬家哪家好,上饶搬家公司电话
|
影像测量仪|检测设备定制|平面度测量仪|三坐标测量机|广州市海科思自动化设备有限公司-400-0528-668
|
趣看科技-视频新媒体技术一体化专业服务商
|
住友套管总代理-日本住友套管-住友热缩管-上海弘奇电子科技有限公司
|